exponenta event banner

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

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

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

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

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

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

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

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

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

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

  7. Запустите независимое или связанное задание на нескольких узлах кластера. Увеличьте размер задания, чтобы включить в него столько задач, сколько необходимо для независимого задания, или столько работников, сколько необходимо для связанного задания.

Примечание

Клиентский сеанс MATLAB должен работать под управлением виртуальной машины Java ® Virtual Machine (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 на объектах панели инструментов параллельных вычислений. Часть необходимой информации хранится в постоянной памяти сеанса MATLAB и не сохраняется в файле.

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

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

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

Выполнение

clear functions

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

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

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

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

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

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

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

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

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

Ускорение работы

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