Matlab批量与createjob

时间:2014-12-15 10:01:12

标签: matlab

我正在使用以下wrapper代码(缩写)将批处理作业(存储在my_parjob.m文件中)提交到matlab群集。

files = { .... list of attached files ... };
cluster = parcluster();  %returns my cluster object
job = batch(cluster,'my_parjob','CaptureDiary',true,'AutoAttachFiles',true,'AttachedFiles',files,'Matlabpool',cluster.NumWorkers-1,'CurrentFolder','/path/to/my/job');
wait(job);

代码工作并使用batch函数,创建具有最大可用工作者的作业并运行作业。 (my_parjob.m包含我的程序parfor)。

有人可以解释batch命令与createJob + createTask + submit之间的差异和/或相似之处吗? batch只是以下的简写吗?

cluster = parcluster();
job = createJob(cluster);
t = createTask(j, ????); % ???
submit(job);
wait(job);

我试图通过阅读heredetailed job controlhere来了解Matlab中的批处理概念,但没有取得多大成功。

1 个答案:

答案 0 :(得分:2)

是的,batch基本上是createJob / createTask工作流程的简便方便。它不允许完全控制这些API,但使用起来要简单得多。

编辑:提取您的示例代码:

cluster = parcluster();
job = batch(cluster,...                  %# 1
    'my_parjob',...                      %# 2
    'CaptureDiary',true,...              %# 3
    'AutoAttachFiles',true,...           %# 4
    'AttachedFiles',files,...            %# 5
    'Matlabpool',cluster.NumWorkers-1,...%# 6
    'CurrentFolder','/path/to/my/job');  %# 7

每条线主要对应createJobcreateTask的参数。有些事情不能完美地翻译 - 在您的情况下,您要求运行名为'my_parjob.m'的MATLAB 脚本。遗憾的是,createJob / createTask仅适用于函数,因此您需要一个名为my_parfcn.m的函数来执行相同的操作。此外,createJob有两种不同的变体 - 另一种称为createCommunicatingJob - 它对应于指定了batch参数的'Matlabpool'作业。所以,把它们放在一起,你最终得到了这个

cluster = parcluster();
job = createCommunicatingJob(cluster, ...     %# 1
    'AutoAttachFiles', true, ...              %# 4
    'AttachedFiles', files, ...               %# 5
    'NumWorkers', cluster.NumWorkers);        %# 6
task = createTask(job, ...
    @my_parfcn, 1, {}, ...                    %# 2 Task function, nargsout, input arguments 
    'CaptureDiary', true);  .                 %# 3
submit(job);

没有等同于'CurrentFolder',因此您必须在my_parfcn内处理。