主要内容

运行批处理作业从工人和访问文件

你可以出售你的计算通过使用在后台运行批处理。如果您的代码需要访问文件,您可以使用额外的选项,如“AttachedFiles”“AdditionalPaths”,使数据访问。你可以关闭或继续工作在MATLAB计算发生和恢复后的结果。

准备的例子

使用支持函数金宝appprepare金宝appSupportingFiles复制所需的数据对于这个示例,您当前的工作目录。

prepare金宝appSupportingFiles;

现在你当前的工作目录中包含4个文件:A.dat,B1.dat,B2.dat,B3.dat

运行批处理作业

创建一个集群对象使用parcluster。默认情况下,parcluster使用默认集群配置文件。检查你的默认集群在MATLAB上的形象选项卡,环境部分,在平行>选择一个默认的集群

c = parcluster ();

把你的代码在一个函数并提交批处理作业使用批处理。一个自定义函数的例子,请参阅支持功能金宝appdivideData。指定输出参数的期望值和单元阵列的输入功能。

注意,如果您发送使用批处理脚本文件,MATLAB集群转移所有工作空间变量,即使您的脚本不使用它们。如果你有一个大的工作空间,它影响负面数据传输时间。作为一项最佳实践,将脚本转换成一个函数文件来避免这种通信开销。这可以通过简单地添加一个函数在脚本的开始。在这个例子中,减少开销divideData这生活之外的一个文件中定义脚本。

如果您的代码使用一个平行的池,使用“池”名称-值对参数创建一个平行池与您指定的工人数量。批处理使用一个额外的工人运行函数本身。

默认情况下,批处理改变了工人的初始工作目录的当前文件夹MATLAB客户机。它可能是有用的控制初始工人工作文件夹。例如,您可能想要控制它如果您的集群使用一个不同的文件系统,因此路径是不同的,比如当你从Windows客户机提交Linux集群。

  • 保持最初的工作文件夹的工人和使用它们的默认设置“CurrentFolder”“。”

  • 改变最初的工作文件夹,设置“CurrentFolder”您所选择的文件夹。

这个示例使用一个平行池有三个工人和选择一个临时位置的初始工作文件夹。使用批处理将计算divideData

工作=批(c @divideData 1 {}“池”3,“CurrentFolder”,tempdir);

批处理运行divideData在一个平行的工人,所以你可以继续工作在MATLAB计算。

如果你想阻止MATLAB,直到任务完成后,使用等待工作对象的函数。

等待(工作);

检索结果,使用fetchOutputs工作对象。作为divideData取决于一个工人找不到文件,fetchOutputs抛出一个错误。你可以通过访问错误信息getReport错误的属性任务工作中的对象。在本例中,代码取决于一个工人找不到文件。

getReport (job.Tasks (1) . error)
ans = '错误使用divideData(4号线)无法读取文件' B2.dat”。没有这样的文件或目录。

从员工访问文件

默认情况下,批处理自动分析你的代码并将所需的文件传输到工人。在某些情况下,您必须显式地传输这些文件——例如,当你在运行时确定一个文件的名字。

在这个例子中,divideData访问的支持文件金宝appA.dat,这批处理自动检测和传输。这个函数也访问B1.dat,但它在运行时解析文件的名称,所以自动依赖分析没有检测。

类型divideData.m
X = divideData()函数=负载(“A.dat”);X = 0(翻转(大小(A)));parfor i = 1:3 B =负载(B +我+“.dat”);X = X + \ B;结束结束

如果数据是工人们可以访问在一个位置,您可以使用名称-值对的论点“AdditionalPaths”指定的位置。“AdditionalPaths”将这条路径添加到MATLAB搜索路径的工人,使数据可见。

pathToData = pwd;工作(2)=批(c @divideData 1 {}“池”3,“CurrentFolder”tempdir,“AdditionalPaths”,pathToData);等待(工作(2));

如果数据是在一个位置,工人不能访问,可以传输文件到工人使用“AttachedFiles”名称-值对的论点。您需要转移文件如果客户机和工人不共享相同的文件系统,或者如果您的集群使用非共享的通用调度程序接口模式。有关更多信息,请参见使用通用调度程序接口配置(MATLAB并行服务器)

文件名=“B”字符串(1:3)+ +“.dat”;工作(3)=批(c @divideData 1 {}“池”3,“CurrentFolder”tempdir,“AttachedFiles”文件名);

找到现有的工作

你可以关闭MATLAB在作业提交和检索结果。在你关闭MATLAB,记下工作的ID。

(3).ID job3ID =工作
job3ID = 25

当你打开MATLAB,你可以找到工作使用findJob函数。

工作(3)= findJob (c,“ID”,job3ID);等待(工作(3));

或者,您可以使用工作监视器来跟踪你的工作。从MATLAB可以打开它选项卡,环境部分,在平行>监控工作

检索结果和清理数据

检索一个批处理作业的结果,使用fetchOutputs函数。fetchOutputs返回一个单元阵列的输出函数运行批处理

X = fetchOutputs(工作(3))
X =1×1单元阵列{40×207双}

当你检索到所需的全部输出,不需要工作对象了,删除它清理数据,避免不必要地消耗资源。

删除(工作)清晰工作

另请参阅

|||