Некоторые задания требуют большего количества управления, чем функциональность, предлагаемая высокоуровневыми построениями как 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, его локальный планировщик и любых рабочих, которые, оказывается, запускают также остановку сразу.