Некоторые задания требуют большего количества управления, чем функциональность, предлагаемая высокоуровневыми построениями как spmd
и parfor
. В таких случаях необходимо программировать все шаги для создания и выполнения задания. Используя локальный кластер (или локальный планировщик) на вашей машине позволяет вам создать и протестировать свои задания, не используя ресурсы вашего сетевого кластера. Распределительные задачи рабочим, которые все работают на вашей клиентской машине, не предлагают улучшения производительности. Поэтому эта функция обеспечивается, в основном, для разработки кода, тестирования и отладки.
Рабочие, запускающиеся в локальном кластере на операционной системе Microsoft® Windows®, могут отобразить графику Simulink® и вывод от определенных функций, таких как uigetfile
и uigetdir
. (С другими платформами или планировщиками, рабочие не могут отобразить вывод графических данных.) Это поведение подвергается удалению в будущем релизе.
Этот раздел детализирует шаги типичного сеанса программирования с программным обеспечением Parallel Computing Toolbox™ с помощью локального кластера:
Объекты, используемые клиентским сеансом, чтобы взаимодействовать с кластером, являются только ссылками на данные в кластерном месте хранения задания, не на клиентском сеансе. После того, как задания и задачи создаются, можно закрыть клиентский сеанс и перезапустить его, и задание все еще находится в месте хранения. Можно найти существующие задания с помощью функции findJob
или свойства Jobs
кластерного объекта.
Вы используете функцию parcluster
, чтобы создать объект на вашем локальном сеансе MATLAB®, представляющем локальный планировщик.
parallel.defaultClusterProfile('local');
c = parcluster();
Вы создаете задание с функцией createJob
. Этот оператор создает задание в кластерном месте хранения задания и создает объект job1
задания на клиентском сеансе. Если вы не используете точку с запятой в конце команды, она отображает некоторую информацию о задании.
job1 = createJob(c)
Job Properties: ID: 2 Type: Independent Username: eng864 State: pending SubmitTime: StartTime: Running Duration: 0 days 0h 0m 0s AutoAttachFiles: true Auto Attached Files: List files AttachedFiles: {} AdditionalPaths: {} Associated Tasks: Number Pending: 0 Number Running: 0 Number Finished: 0 Task ID of Errors: []
Свойством TheState
задания является pending
. Это означает, что задание еще не было представлено (поставленное в очередь) для выполнения, таким образом, можно теперь добавить задачи в него.
Отображение планировщика теперь указывает на существование вашего задания, которое является незаконченным, как это появляется в этом частичном листинге:
c
Local Cluster Associated Jobs Number Pending: 1 Number Queued: 0 Number Running: 0 Number Finished: 0
После того, как вы создали свое задание, можно создать задачи для задания с помощью функции createTask
. Задачи задают функции, которые будут оценены рабочими во время выполнения задания. Часто, задачи задания все идентичны. В этом примере пять задач каждый генерирует 3х3 матрицу случайных чисел.
createTask(job1, @rand, 1, {{3,3} {3,3} {3,3} {3,3} {3,3}});
Свойство Tasks
job1
является теперь матрицей 5 на 1 объектов задачи.
job1.Tasks
ID State FinishTime Function Error ----------------------------------------------------- 1 1 pending @rand 2 2 pending @rand 3 3 pending @rand 4 4 pending @rand 5 5 pending @rand
Чтобы запустить ваше задание и оценить его задачи, вы представляете задание кластеру с функцией submit
.
submit(job1)
Локальный планировщик запускает рабочих на вашей машине и распределяет задачи job1
этим рабочим для оценки.
Результаты каждой оценки задачи хранятся в свойстве OutputArguments
объекта задачи как массив ячеек. После ожидания задания, чтобы завершиться, используйте функциональный fetchOutputs
, чтобы получить результаты всех задач в задании.
wait(job1) results = fetchOutputs(job1);
Отобразите результаты каждой задачи.
results{1:5}
0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214 0.4447 0.9218 0.4057 0.6154 0.7382 0.9355 0.7919 0.1763 0.9169 0.4103 0.3529 0.1389 0.8936 0.8132 0.2028 0.0579 0.0099 0.1987 0.6038 0.0153 0.9318 0.2722 0.7468 0.4660 0.1988 0.4451 0.4186 0.8462 0.6721 0.6813 0.5252 0.8381 0.3795 0.2026 0.0196 0.8318
После того, как задание завершено, можно повторить команды, чтобы исследовать обновленное состояние кластера, задания и объектов задачи:
c job1 job1.Tasks
Локальный планировщик запускается на клиентском сеансе MATLAB, таким образом, вы не должны запускать отдельный планировщик или процесс Планировщика Задания MATLAB для локального планировщика. Когда вы представляете задание локальному кластеру, планировщик запускает работника MATLAB для каждой задачи в задании. Можно сделать это для стольких же рабочих, сколько позволено локальным профилем. Если ваше задание имеет больше задач, чем разрешенные рабочие, планировщик ожидает одной из текущих задач завершиться прежде, чем запустить другого работника MATLAB, чтобы оценить следующую задачу. Можно изменить количество разрешенных рабочих в профиле кластера local
. Если не заданный, значение по умолчанию должно запустить только столько же рабочих сколько вычислительные ядра на машине.
Локальный кластер не имеет никакого взаимодействия ни с каким другим планировщиком или Планировщиком Задания MATLAB, ни ни с какими другими рабочими, которые могут также работать на вашей клиентской машине под mjs сервисом. Несколько сеансов работы с MATLAB на вашем компьютере могут каждый запускать его собственный локальный планировщик с его собственных рабочих, но эти группы не взаимодействуют друг с другом.
Когда вы заканчиваете свой клиентский сеанс MATLAB, его локальный планировщик и любых рабочих, которые, оказывается, запускают также остановку сразу.