Когда написание кода для программного обеспечения Parallel Computing Toolbox™, необходимо усовершенствовать один шаг за один раз в сложности приложения. Проверка вашей программы на каждом шаге предотвращает то, что вы имели необходимость отладить несколько потенциальных проблем одновременно. Если вы сталкиваетесь с какими-либо проблемами на каком-либо шаге по пути, назад до предыдущего шага и повторно проверяете ваш код.
Рекомендуемая методика программирования для приложений распределенных или параллельных вычислений
Запускайте код обычно по вашей локальной машине. Сначала проверьте все свои функции так, чтобы, в то время как вы прогрессируете, вы не пытались отладить функции и распределение одновременно. Запустите свои функции в одном экземпляре MATLAB на вашем локальном компьютере. Для программирования предложений смотрите Методы, чтобы Улучшать Производительность.
Решите, нужно ли вам независимое или связывающееся задание. Если ваше приложение включает большие наборы данных, на которых вам нужны одновременные выполняемые вычисления, вы можете извлечь выгоду из связывающегося задания с распределенными массивами. Если ваше приложение включает циклично выполненные или повторяющиеся вычисления, которые могут быть выполнены друг независимо от друга, независимое задание может быть соответствующим.
Измените свой код для деления. Решите, как вы хотите свой разделенный код. Для независимого задания определите, как лучше всего разделить его на задачи; например, каждая итерация цикла for может описать одну задачу. Для связывающегося задания определите, как лучше всего использовать в своих интересах параллельную обработку; например, большой массив может быть распределен на всех ваших рабочих.
Использование spmd
разработать параллельную функциональность. Использование spmd
с локальным пулом, чтобы разработать ваши функции на нескольких рабочих параллельно. Как вы прогрессируете и используете spmd
в удаленном кластере, который может быть всем, которое необходимо завершить работу.
Запустите независимое или связывающееся задание с локальным планировщиком. Создайте независимое или связывающееся задание и запустите задание с помощью локального планировщика с несколькими локальными рабочими. Это проверяет, что ваш код правильно заключен для пакетного выполнения, и в случае независимого задания, что его расчеты правильно разделены на задачи.
Запустите независимое задание только на одном кластерном узле. Запустите свое независимое задание с одной задачей проверить, что удаленное распределение работает между вашим клиентом и кластером, и проверять соответствующую передачу дополнительных файлов и путей.
Запустите независимое или связывающееся задание на нескольких кластерных узлах. Увеличьте свое задание, чтобы включать столько задач, сколько вам нужно для независимого задания, или стольких рабочих, сколько вам нужно для связывающегося задания.
Примечание
Клиентский сеанс MATLAB должен запускать Виртуальную машину Java® (JVM™), чтобы использовать программное обеспечение Parallel Computing Toolbox. Не начинайте MATLAB с -nojvm
флаг.
Текущий каталог работника 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
задания свойство.
Кроме того, системные объекты (e.g., классы Java, классы.NET, совместно использовали библиотеки, и т.д.), которые загружаются, импортированные, или добавили к пути поиска файлов Java в клиенте MATLAB, не доступны на рабочих, если явным образом не загружено, импортированные или прибавили рабочих, соответственно. Кроме в коде функции задачи, типичные способы загрузить эти объекты могут быть в taskStartup
, jobStartup
, и в случае рабочих в параллельном пуле, в poolStartup
и использование pctRunOnAll
.
Выполнение
clear functions
очищает все объекты Parallel Computing Toolbox от текущего сеанса работы с MATLAB. Они все еще остаются в Планировщике Задания MATLAB. Для получения информации о воссоздании этих объектов на клиентском сеансе смотрите, Восстанавливают Объекты.
Первая задача, которая работает на сеансе рабочего, который использует программное обеспечение Simulink®, может занять много времени, чтобы запуститься, когда Simulink автоматически не запускается в начале сеанса рабочего. Вместо этого Simulink запускает когда сначала названный. Последующие задачи на том сеансе рабочего запустятся быстрее, если рабочий не будет перезапущен между задачами.
На сеансах рабочего, работающих на Macintosh или операционных системах UNIX®, pause(Inf)
сразу возвращается, вместо приостановки. Это должно препятствовать тому, чтобы сеанс рабочего висел, когда прерывание не возможно.
Операции, которые включают передачу многих объектов или больших объемов данных по сети, могут занять много времени. Например, получая Tasks
задания свойство или результаты всех задач задания могут занять много времени, если задание содержит много задач. См. также Ограничения Размера Прикрепленных файлов.
Поскольку задания и задачи запущены вне клиентского сеанса, вы не можете использовать Ctrl+C (^C) на клиентском сеансе, чтобы прервать их. Чтобы управлять или прервать выполнение заданий и задач, используйте такие функции как cancel
, delete
, demote
, promote
, pause
, и resume
.
Вы можете найти, что ваш код запускается медленнее на нескольких рабочих, чем он делает на одном рабочем компьютере. Это может произойти, когда запуск задачи и время остановки являются значительными относительно времени выполнения задачи. Наиболее распространенная ошибка в этом отношении состоит в том, чтобы сделать задачи слишком небольшими, i.e., слишком мелкомодульный. Другая частая ошибка состоит в том, чтобы отправить большие суммы данных о вводе или выводе с каждой задачей. В обоих из этих случаев время это берет, чтобы передать данные и инициализировать задачу, далеко больше фактического времени, которое требуется для рабочего, чтобы выполнить функцию задачи.