Matlab批处理与createjob

jm6*_*666 5 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);
Run Code Online (Sandbox Code Playgroud)

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

batch有人可以向我解释命令和createJob+ createTask+之间的区别和/或相似之处吗submit?the batchonly 是以下内容的一种简写吗?

cluster = parcluster();
job = createJob(cluster);
t = createTask(j, ????); % ???
submit(job);
wait(job);
Run Code Online (Sandbox Code Playgroud)

我试图通过阅读此处以及详细的作业控制此处来理解 Matlab 中的批处理概念,但没有取得太大成功。

Edr*_*ric 3

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

编辑:以您的示例代码为例:

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
Run Code Online (Sandbox Code Playgroud)

每行主要对应于createJob或 的一个参数createTask。但有一些事情不能完美翻译 - 在您的情况下,您请求运行一个名为 的MATLAB脚本'my_parjob.m'。不幸的是,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);
Run Code Online (Sandbox Code Playgroud)

没有与 等效的东西'CurrentFolder',因此您必须在内部处理它my_parfcn