номер задачи в распределенных заданиях MATLAB? - PullRequest
2 голосов
/ 01 марта 2011

Я запускаю распределенное задание в кластере.Мне нужно выполнить скрипт, который отправляет мне электронное письмо по окончании последней задачи (точнее, все задачи выполнены).У меня есть готовый сценарий, но я не уверен, как найти решение задачи.Есть ли идентификатор задачи, аналогичный labindex?

Причина, по которой я хочу встроить эту функцию электронной почты в работу, заключается в том, что я могу просто выйти из MATLAB после отправки и собрать свои данные, когда это будет сделано.Таким образом, я не буду тратить ресурсы, пингуя их часто, чтобы получить их состояние.

Ответы [ 2 ]

2 голосов
/ 01 марта 2011
jobMgr = findResource(parameters for your cluster's job manager...);

job = createJob(jobMgr);
set(job, 'JobData', yourdata);
set(job, 'MaximumNumberOfWorkers', yourmaxworkers);
set(job, 'PathDependencies', yourpathdeps);
set(job, 'FileDependencies', yourfiledeps);
set(job, 'Timeout', yourtimeout);

for m = 1:numjobs
   task(m) = createTask(job, @parallelfoo, 1, {m});

   % Calls taskFinish when the task completes
   set(task(m), 'FinishedFcn', {@taskFinish, m});
end

В другом месте вы определили функцию taskFinish, которая получает обратный вызов при завершении каждой задачи.

function taskFinish(taskObj, eventData, tasknum)
   disp(['Task ' num2str(tasknum) ' completed']);
end

Обратите внимание, этот код был написан для первоначального выпуска Distributed Computing Toolbox (который впоследствии был переименован в Parallel Computing Toolbox), поэтому возможно, что есть более элегантные способы выполнения того, что вы пытаетесь сделать. Тем не менее, с этим можно справиться с одной оговоркой - я понимаю, что эта функция обратного вызова работает, только если вы используете диспетчер заданий MATLAB в своем кластере (не один из сторонних диспетчеров заданий MPI, таких как TORQUE).

0 голосов
/ 01 марта 2011

Я не уверен, что это ответит на большую часть вашего вопроса, но вы можете получить идентификатор задачи при работе на рабочих, например, так:

t = getCurrentTask();
tid = t.ID;

Однако обратите внимание, что большинство планировщиков выполняют задачи впроизвольный порядок ...

...