我正在使用以下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);
我试图通过阅读here和detailed job control和here来了解Matlab中的批处理概念,但没有取得多大成功。
答案 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
每条线主要对应createJob
或createTask
的参数。有些事情不能完美地翻译 - 在您的情况下,您要求运行名为'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
内处理。