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