Некоторые задания требуют большего количества управления, чем функциональность, предлагаемая высокоуровневыми построениями как spmd
и parfor
. В таких случаях необходимо программировать все шаги для создания и выполнения задания. Используя локальный кластер (или локальный планировщик) на вашей машине позволяет вам создать и протестировать свои задания, не используя ресурсы вашего сетевого кластера. Распределительные задачи рабочим, которые все работают на вашей клиентской машине, не предлагают улучшения эффективности. Поэтому эта функция обеспечивается, в основном, для разработки кода, тестирования и отладки.
Примечание
Рабочие, запускающиеся в локальном кластере на Microsoft® Windows® операционная система может отобразить Simulink® графика и выход от определенных функций такой как uigetfile
и uigetdir
. (С другими платформами или планировщиками, рабочие не могут отобразить вывод графических данных.) Это поведение подвергается удалению в будущем релизе.
Этот раздел детализирует шаги типичного сеанса программирования с программным обеспечением Parallel Computing Toolbox™ с помощью локального кластера:
Объекты, используемые клиентским сеансом, чтобы взаимодействовать с кластером, являются только ссылками на данные в кластерном месте хранения задания, не на клиентском сеансе. После того, как задания и задачи создаются, можно закрыть клиентский сеанс и перезапустить его, и задание все еще находится в месте хранения. Можно найти существующие задания с помощью findJob
функционируйте или Jobs
свойство кластерного объекта.
Вы используете parcluster
функция, чтобы создать объект в вашем локальном MATLAB® сеанс, представляющий локальный планировщик.
c = parcluster('local');
Вы создаете задание с createJob
функция. Этот оператор создает задание в кластерном месте хранения задания и создает объект job1
задания на клиентском сеансе. Если вы не используете точку с запятой в конце команды, она отображает некоторую информацию о задании.
job1 = createJob(c)
Job Properties: ID: 1 Type: independent Username: mylogin State: pending SubmitDateTime: StartDateTime: RunningDuration: 0 days 0h 0m 0s NumThreads: 1 AutoAttachFiles: true Auto Attached Files: List files AttachedFiles: {} AutoAddClientPath: false AdditionalPaths: {} Associated Tasks: Number Pending: 0 Number Running: 0 Number Finished: 0 Task ID of Errors: [] Task ID of Warnings: []
State
свойством задания является pending
. Это означает, что задание еще не было представлено (поставленное в очередь) для выполнения, таким образом, можно теперь добавить задачи в него.
Отображение планировщика теперь указывает на существование вашего задания, которое является незаконченным, как это появляется в этом частичном листинге:
c
Local Cluster Properties: Profile: local Modified: false Host: myhost NumWorkers: 6 NumThreads: 1 JobStorageLocation: C:\Users\mylogin\AppData\Roaming\MathWorks\MATLAB\local_cluster_jobs\R2021b RequiresOnlineLicensing: false 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
5x1 Task array: ID State FinishDateTime Function Errors Warnings ------------------------------------------------------------------------- 1 1 pending rand 0 0 2 2 pending rand 0 0 3 3 pending rand 0 0 4 4 pending rand 0 0 5 5 pending rand 0 0
Чтобы запустить ваше задание и оценить его задачи, вы представляете задание кластеру с submit
функция.
submit(job1)
Локальный планировщик запускает рабочих на вашей машине и распределяет задачи job1
этим рабочим для оценки.
Результаты каждой оценки задачи хранятся в объекте задачи OutputArguments
свойство как массив ячеек. После ожидания задания, чтобы завершиться, используйте функцию fetchOutputs
получать результаты всех задач в задании.
wait(job1) results = fetchOutputs(job1);
Отобразите результаты каждой задачи.
results{1:5}
ans = 0.1349 0.5332 0.2621 0.6744 0.1150 0.9625 0.9301 0.6540 0.8972 ans = 0.6383 0.6509 0.4429 0.5195 0.3018 0.3972 0.1398 0.7101 0.7996 ans = 0.9730 0.2934 0.6071 0.7104 0.1558 0.5349 0.3614 0.3421 0.4118 ans = 0.3241 0.9401 0.1897 0.0078 0.3231 0.3685 0.9383 0.3569 0.5250 ans = 0.4716 0.6667 0.7993 0.5674 0.6959 0.9165 0.3813 0.8325 0.8324
После того, как задание завершено, можно повторить команды, чтобы исследовать обновленное состояние кластера, задания и объектов задачи:
c job1 job1.Tasks
Локальный планировщик запускается на клиентском сеансе MATLAB, таким образом, вы не должны запускать отдельный планировщик или процесс Планировщика Задания MATLAB для локального планировщика. Когда вы представляете задание локальному кластеру, планировщик запускает работника MATLAB для каждой задачи в задании. Можно сделать это для стольких же рабочих, сколько позволено локальным профилем. Если ваше задание имеет больше задач, чем разрешенные рабочие, планировщик ожидает одной из текущих задач завершиться прежде, чем запустить другого работника MATLAB, чтобы оценить следующую задачу. Можно изменить количество разрешенных рабочих в local
кластерный профиль. Если не заданный, значение по умолчанию должно запустить только столько же рабочих сколько вычислительные ядра на машине.
Локальный кластер не имеет никакого взаимодействия ни с каким другим планировщиком или Планировщиком Задания MATLAB, ни ни с какими другими рабочими, которые могут также работать на вашей клиентской машине под mjs сервисом. Несколько сеансов работы с MATLAB на вашем компьютере могут каждый начинать его собственный локальный планировщик с его собственных рабочих, но эти группы не взаимодействуют друг с другом.
Когда вы заканчиваете свой клиентский сеанс MATLAB, его локальный планировщик и любых рабочих, которые, оказывается, запускают также остановку сразу.