При написании кода для программного обеспечения Parallel Computing Toolbox™, вы должны продвигаться один шаг за раз в сложности вашего приложения. Проверка программы на каждом шаге препятствует необходимости отладки нескольких потенциальных проблем одновременно. Если вы столкнулись с какими-либо проблемами на любом шаге по пути, вернитесь к предыдущему шагу и проверьте код заново.
Рекомендуемая методика программирования для приложений распределенных или параллельных вычислений:
Выполняйте код нормально на локальном компьютере. Сначала проверьте все свои функции так, чтобы по мере прогресса вы не пытались отлаживать функции и распределение одновременно. Запустите свои функции в одном образце MATLAB® программное обеспечение на локальном компьютере. Для предложений по программированию смотрите Методы повышения эффективности.
Решите, нужна ли вам независимая или общающаяся работа. Если ваше приложение включает большие наборы данных, на которых необходимо выполнить одновременные вычисления, вы можете воспользоваться заданием связи с распределенными массивами. Если ваше приложение включает циклические или повторяющиеся вычисления, которые могут быть выполнены независимо друг от друга, может быть подходящим независимое задание.
Измените код для деления. Решите, как вы хотите разделить ваш код. Для самостоятельного задания определите, как лучше разделить его на задачи; для примера каждая итерация цикла for-loop может задать одну задачу. Для коммуникационного задания определите, как лучше использовать преимущества параллельной обработки; для примера большой массив может быть распределен между всеми вашими работниками.
Использовать 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 Job Scheduler, задание, задачу или рабочий объект работникам MATLAB как часть JobData
задания свойство.
Кроме того, системные объекты (например, классы 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
.
Вы можете обнаружить, что ваш код работает медленнее на нескольких рабочих местах, чем на одном рабочем компьютере. Это может произойти, когда запуск задачи и время остановки значительны относительно времени выполнения задачи. Самая распространенная ошибка в этом отношении состоит в том, чтобы сделать задачи слишком маленькими, то есть слишком мелкими. Другой распространенной ошибкой является отправка больших объемов входа или выходных данных с каждой задачей. В обоих случаях время, необходимое для передачи данных и инициализации задачи, намного превышает фактическое время, необходимое работнику для оценки функции задачи.