主要内容

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

您可以卸载您的计算运行在后台使用批处理。如果您的代码需要访问文件,您可以使用其他选项,例如“AttachedFiles”“AdditionalPaths”,以使数据可访问。当计算发生时,您可以关闭或继续在MATLAB中工作,然后恢复结果。

准备的例子

使用以下命令准备和复制这个示例的支持文件。万博1manbetx

prepare万博1manbetxSupportingFiles;

运行批处理作业

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

c = parcluster ();

将代码放入函数中,并通过使用批处理。有关自定义函数的示例,请参见支持函数万博1manbetxmyFunction。指定输出参数的预期数量和带有函数输入的单元格数组。

如果您的代码使用并行池,则使用“池”名称-值对参数,以创建具有指定工人数量的并行池。批处理使用额外的worker来运行函数本身。

默认情况下,批处理将workers的初始工作目录更改为MATLAB客户机的当前文件夹。在workers中控制初始工作目录可能很有用。例如,如果您的集群使用不同的文件系统,那么您可能希望控制它,因此路径是不同的,例如当您从Windows客户端机器提交到Linux集群时。

  • 要保留工作人员的初始工作目录并使用它们的默认目录,set“CurrentFolder”“。”

  • 要更改初始工作目录,请设置“CurrentFolder”到您选择的文件夹。

这个示例使用一个具有三个worker的并行池,并为初始工作目录选择一个临时位置。

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

批处理将函数中的计算卸载给并行工作器,这样在进行计算时就可以继续在MATLAB中工作。

如果你想阻塞MATLAB直到作业完成,使用等待函数在job对象上执行。

等待(工作);

要检索结果,请使用fetchOutputs在作业对象上。

如果你的代码有错误,那么fetchOutputs抛出一个错误。您可以通过检查错误的属性任务任务中的对象。在这个例子中,代码依赖于一个工人找不到的文件。

getReport (job.Tasks (1) . error)
ans = '错误使用myFunction(第4行)无法读取文件'mydata .dat'。没有这样的文件或目录。

从工作人员那里访问文件

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

在这个例子中,myFunction访问支持文件万博1manbetxmydata.dat,这批处理自动检测和传输。该函数还访问mydata1.dat,但它会在运行时解析文件的名称,因此自动依赖关系分析不会检测到它。

类型myFunction.m
函数X = myFunction() A = load("mydata.dat");X = 0(翻转(大小(A)));parfor i = 1:3 B = load("mydata"+i+".dat");X = X + A\B;结束结束

如果数据位于工作人员可以访问的位置,则可以使用名称-值对参数“AdditionalPaths”指定位置。“AdditionalPaths将此路径添加到工人的MATLAB搜索路径中,并使数据对他们可见。

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

如果数据位于工作人员无法访问的位置,则可以使用“AttachedFiles”名称-值对的论点。

工作(3)=批(c @myFunction 1 {}“池”3,“CurrentFolder”tempdir,“AttachedFiles”,“mydata”字符串(1:3)+ +“.dat”);

找到现有的工作

您可以在作业提交后关闭MATLAB,然后检索结果。在关闭MATLAB之前,请记录作业ID。

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

当您再次打开MATLAB时,您可以使用findJob函数。

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

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

检索结果并清理数据

要检索批处理作业的结果,请使用fetchOutputs函数。fetchOutputs返回一个单元格数组,其中包含运行函数的输出批处理

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

当您检索了所有必需的输出并且不再需要job对象时,请删除它以清理其数据并避免不必要地消耗资源。

删除(工作)清晰工作

另请参阅

|||