Matlab批量与createjob

我正在使用以下包装器代码(缩短)将批处理作业(存储在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);

代码工作并使用批处理功能,创建具有最大可用工作人员的作业并运行作业. (my_parjob.m包含我的parfor程序).

有人可以解释一下批处理命令和createJob createTask提交之间的区别和/或相似之处吗?批次只是以下的一种简写吗?

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

我试图通过阅读here以及detailed job controlhere来理解Matlab中的批处理概念,但没有取得多大成功.

最佳答案 是的,批处理对于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

每行主要对应于createJob或createTask的参数.虽然有一些事情没有完全转换 – 在你的情况下,你要求运行一个名为’my_parjob.m’的MATLAB脚本.不幸的是,createJob / createTask仅适用于函数,因此您需要一个名为my_parfcn.m的函数来执行相同的操作.此外,createJob有两种不同的变体 – 另一种叫做createCommunicatingJob – 它对应于指定了’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中处理它.

点赞