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