我正在使用以下包装器代码(缩短)将批处理作业(存储在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 control和here来理解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中处理它.