Программирование советов

Инструкции по разработке программы

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

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

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

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

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

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

  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, задание, задачу или объект рабочего работникам 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.

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

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