主要内容

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

您可以使用的卸载计算以在后台运行。如果您的代码需要访问文件,则可以使用其他选项,例如'附加的文件'或者'含量径',使数据可访问。您可以在计算进行并稍后恢复结果时关闭或继续在MATLAB中工作。

准备例子

使用支持功能金宝app准备porti金宝appngfiles.要将此示例的所需数据复制到当前的工作文件夹。

准备港口;金宝app

您当前的工作文件夹现在包含4个文件:A.DAT.b1.dat.b2.dat., 和B3.DAT.

运行批处理工作

使用群集对象使用Parcluster.。默认,Parcluster.使用默认的群集配置文件。在MATLAB上检查您的默认集群配置文件标签,在环境部分,在平行>选择默认群集

c = parcluster();

将代码放在函数内,并通过使用将其作为批处理作业提交。有关自定义函数的示例,请参阅支持功能金宝appdividedata.。指定具有输入到该功能的预期输出参数和单元格数量。

请注意,如果使用批次发送脚本文件,MATLAB即使您的脚本不使用它们,MATLAB也将所有工作区变量传输到群集中。如果您有一个大工作区,它会影响数据传输时间。作为最佳实践,将脚本转换为函数文件以避免此通信开销。您可以通过简单地在脚本的开头添加函数行来执行此操作。在此示例中减少开销,dividedata.在此实时脚本之外的文件中定义。

如果您的代码使用并行池,请使用'水池'名称 - 值对参数创建并行池,其中包含指定的工人数。使用其他工人运行函数本身。

默认,将Worker的初始工作文件夹更改为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 = load(“a.dat”);x =零(翻转(尺寸(a)));Parcon i = 1:3 b = load(“b”+ i +“.dat”);x = x + a \ b;结束

如果数据位于工人可以访问的位置,则可以使用名称值对参数'含量径'指定位置。'含量径'将此路径添加到工人的MATLAB搜索路径上,并使其对它们可见。

pathtodata = PWD;作业(2)=批处理(c,@ dividateata,1,{},......'水池',3,......'currentfolder',Tempdir,......'含量径',pathtodata);等待(工作(2));

如果数据处于工人无法访问的位置,则可以使用该数据将文件传输到工人'附加的文件'名称值对参数。如果客户端和工人不共享相同的文件系统,则需要传输文件,或者群集在非正日模式下使用通用调度程序接口。有关更多信息,请参阅配置使用通用调度程序接口(MATLAB并行服务器)

filenames =“b”+字符串(1:3)+“.dat”;作业(3)=批处理(C,@ dividedata,1,{},......'水池',3,......'currentfolder',Tempdir,......'附加的文件',文件名);

找到现有的工作

您可以在提交工作后关闭MATLAB,并稍后检索结果。在关闭MATLAB之前,请记住作业ID。

Job3ID =作业(3)。地
Job3id = 25.

当您再次打开Matlab时,您可以使用使用的作业找工作功能。

作业(3)= findjob(c,'ID',job3id);等待(工作(3));

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

检索结果并清理数据

要检索批处理作业的结果,请使用fetchOutputs.功能。fetchOutputs.返回带有函数的输出运行的单元格数组

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

检索所有所需的输出并不需要作业对象时,请将其删除以清理其数据并不必要地避免消耗资源。

删除(工作)清除工作

也可以看看

|||