在MATLAB分布式作业中的tasknumber?

时间:2011-02-28 22:47:51

标签: matlab parallel-processing distributed-computing cluster-computing

我正在群集上运行分布式作业。我需要执行一个脚本,在最后一个任务完成时向我发送一封电子邮件(相反,所有任务都已完成)。我准备好了我的脚本,但我不确定如何找到任务完成。是否有类似于labindex的任务ID?

我想在工作中构建此电子邮件功能的原因是我可以在提交后退出MATLAB并在完成后收集我的数据。这样我就不会浪费资源来经常ping它以获得它的状态。

2 个答案:

答案 0 :(得分:2)

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)时,此回调功能才有效。

答案 1 :(得分:0)

我不确定这是否能解决您的大部分问题,但是您可以在这样的工作人员上运行任务ID:

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

但请注意,大多数调度程序以任意顺序执行任务...