Советы по программированию

Руководство по разработке программ

При написании кода для программного обеспечения Parallel Computing Toolbox™, вы должны продвигаться один шаг за раз в сложности вашего приложения. Проверка программы на каждом шаге препятствует необходимости отладки нескольких потенциальных проблем одновременно. Если вы столкнулись с какими-либо проблемами на любом шаге по пути, вернитесь к предыдущему шагу и проверьте код заново.

Рекомендуемая методика программирования для приложений распределенных или параллельных вычислений:

  1. Выполняйте код нормально на локальном компьютере. Сначала проверьте все свои функции так, чтобы по мере прогресса вы не пытались отлаживать функции и распределение одновременно. Запустите свои функции в одном образце MATLAB® программное обеспечение на локальном компьютере. Для предложений по программированию смотрите Методы повышения эффективности.

  2. Решите, нужна ли вам независимая или общающаяся работа. Если ваше приложение включает большие наборы данных, на которых необходимо выполнить одновременные вычисления, вы можете воспользоваться заданием связи с распределенными массивами. Если ваше приложение включает циклические или повторяющиеся вычисления, которые могут быть выполнены независимо друг от друга, может быть подходящим независимое задание.

  3. Измените код для деления. Решите, как вы хотите разделить ваш код. Для самостоятельного задания определите, как лучше разделить его на задачи; для примера каждая итерация цикла for-loop может задать одну задачу. Для коммуникационного задания определите, как лучше использовать преимущества параллельной обработки; для примера большой массив может быть распределен между всеми вашими работниками.

  4. Использовать spmd разработка параллельных функциональных возможностей. Использовать spmd с локальным пулом, чтобы развивать ваши функции на нескольких работниках параллельно. Когда вы прогрессируете и используете spmd в удаленном кластере это может быть все, что вам нужно для завершения работы.

  5. Запустите независимое или коммуникационное задание с локальным планировщиком. Создайте независимое или коммуникационное задание и запустите задание с помощью локального планировщика с несколькими локальными работниками. Это проверяет, что ваш код правильно настроен для пакетного выполнения, и в случае независимого задания, что его расчеты правильно разделены на задачи.

  6. Запуск независимого задания только на одном узле кластера. Запустите свое независимое задание с одной задачей, чтобы убедиться, что удаленное распределение работает между клиентом и кластером, и проверьте правильность передачи дополнительных файлов и путей.

  7. Запустите независимое или коммуникационное задание на нескольких узлах кластера. Масштабируйте свою работу, чтобы включить столько задач, сколько вам нужно для независимой работы, или столько работников, сколько вам нужно для коммуникационной работы.

Примечание

Сеанс клиента MATLAB должен запускать Java® Виртуальная машина (JVM™) для использования программного обеспечения Parallel Computing Toolbox. Не запускайте MATLAB с -nojvm флаг.

Текущая рабочая директория рАБОТНИКА MATLAB

Текущая директория работника MATLAB в начале его сеанса:

CHECKPOINTBASE\HOSTNAME_WORKERNAME_mlworker_log\work

где CHECKPOINTBASE определяется в mjs_def файл, HOSTNAME - имя узла, на котором работает рабочий, и WORKERNAME - имя Работника MATLAB сеанса.

Для примера, если рабочий назвал worker22 работает на узле nodeA52, и его CHECKPOINTBASE значение C:\TEMP\MJS\Checkpoint, стартовая текущая директория для этого рабочего сеанса

C:\TEMP\mjs\Checkpoint\nodeA52_worker22_mlworker_log\work

Запись в файлы из рабочих процессов

Когда несколько рабочих процессов пытаются записать в один и тот же файл, у вас может возникнуть условие гонки, конфликт или один рабочий процесс может перезаписать данные от другого рабочего. Это может произойти, когда:

  • На машину приходится более одного работника, и они пытаются записать в один и тот же файл.

  • Рабочие имеют общую файловую систему и используют тот же путь для идентификации файла для записи.

В некоторых случаях может возникнуть ошибка, но иногда перезапись может происходить без ошибок. Чтобы избежать проблемы, убедитесь, что каждый рабочий или parfor итерация имеет уникальный доступ к любым файлам, в которых она записывает или сохраняет данные. Нет проблем, когда несколько рабочих процессов считываются из одного и того же файла.

Сохранение или отправка объектов

Не используйте save или load функция на объектах Parallel Computing Toolbox. Часть информации, которая требуется этим объектам, хранится в постоянной памяти сеанса работы с MATLAB и не будет сохранена в файле.

Точно так же вы не можете отправить параллельный вычислительный объект между параллельными вычислительными процессами с помощью свойств объекта. Например, вы не можете передать MATLAB Job Scheduler, задание, задачу или рабочий объект работникам MATLAB как часть JobData задания свойство.

Кроме того, системные объекты (например, классы Java, классы .NET, общие библиотеки и т.д.), которые загружаются, импортируются или добавляются в путь поиска файлов Java в клиенте MATLAB, недоступны для рабочих процессов, если только они не загружены, не импортированы или не добавлены в рабочие места, соответственно. Кроме кода функции задачи, типичные способы загрузки этих объектов могут быть в taskStartup, jobStartup, и в случае работников в параллельном бассейне, в poolStartup и использование pctRunOnAll.

Использование функций clear

Выполнение

clear functions

очищает все объекты Parallel Computing Toolbox из текущего сеанса работы с MATLAB. Они все еще остаются в Планировщике заданий MATLAB. Дополнительные сведения о воссоздании этих объектов в сеансе клиента см. в разделе Восстановление объектов.

Выполнение задач, вызывающих программное обеспечение Simulink

Первая задача, которая запускается в рабочем сеансе, которая использует Simulink® выполнение программы может занять много времени, так как Simulink не запускается автоматически в начале рабочего сеанса. Вместо этого Simulink запускается при первом вызове. Последующие задачи в этом рабочем сеансе будут выполняться быстрее, если только рабочий процесс не перезапущен между задачами.

Использование функции паузы

На рабочих сеансах, выполняемых на Macintosh или UNIX® операционные системы, pause(Inf) возвращается немедленно, а не пауза. Это позволяет предотвратить зависание сеанса работы при невозможности прерывания.

Передача больших объемов данных

Операции, которые включают передачу многих объектов или больших объемов данных по сети, могут занять много времени. Например, получение Tasks о работе свойство или результаты всех задач задания могут занять много времени, если задание содержит много задач. Смотрите также Ограничения по размеру вложенных файлов.

Прерывание задания

Поскольку задания и задачи выполняются вне клиентского сеанса, вы не можете использовать Ctrl + C (^ C) в клиентском сеансе, чтобы прервать их. Для контроля или прерывания выполнения заданий и задач используйте такие функции, какcancel, delete, demote, promote, pause, и resume.

Ускорение задания

Вы можете обнаружить, что ваш код работает медленнее на нескольких рабочих местах, чем на одном рабочем компьютере. Это может произойти, когда запуск задачи и время остановки значительны относительно времени выполнения задачи. Самая распространенная ошибка в этом отношении состоит в том, чтобы сделать задачи слишком маленькими, то есть слишком мелкими. Другой распространенной ошибкой является отправка больших объемов входа или выходных данных с каждой задачей. В обоих случаях время, необходимое для передачи данных и инициализации задачи, намного превышает фактическое время, необходимое работнику для оценки функции задачи.