主要内容

批处理

运行MATLABworker上的脚本或函数

描述

例子

j=批(脚本运行脚本文件脚本在由默认集群配置文件指定的集群中的工作器上。(注意:请勿包含.m使用脚本名称的文件扩展名。)函数返回j,运行脚本的作业对象的句柄。脚本文件脚本复制到工作者。

j=批(myCluster脚本与之相同批处理(脚本)除了脚本在群集对象指定的群集中的工作人员上运行myCluster

例子

j=批(fcnN{x1,...,xn}运行函数fcn在由默认集群配置文件指定的集群中的工作器上。函数返回j,运行该函数的作业对象的句柄。函数是用给定的参数求值的,x1,…,xn和回报N输出参数。函数文件fcn复制到工作者。(注意:请勿包含.m带有函数名参数的文件扩展名。)

例子

j=批(myClusterfcnN{x1,...,xn}与之相同批处理(FCN,N,{X1,...,XN})除了函数在群集对象指定的群集中运行的函数myCluster

例子

j=批(___名称,价值指定使用一个或多个名称-值对参数修改作业行为的选项。除非另有说明,否则这些选项支金宝app持函数和脚本的批处理。除了使用前面语法中的任何输入参数组合外,还可以使用此语法。

例子

全部收缩

批处理卸载到在背景中运行的Matlab工作台会话。在计算发生时,您可以继续使用MATLAB。

使用脚本作为批处理作业批处理功能。默认,批处理使用默认的群集配置文件。在MATLAB上检查您的默认集群配置文件标签,在环境部分,在平行>选择默认群集。属性指定集群概要文件“配置文件”名称-值对的论点。

工作=批(“myScript”);

批处理不会阻塞MATLAB,你可以继续工作,而计算发生。

如果你想阻塞MATLAB直到工作结束,使用等待函数在作业对象上的。

等待(工作);

默认情况下,MATLAB将输出从批处理作业输出的命令窗口保存到作业的日记中。要检索它,请使用日记功能。

日记(工作)
---开始日记--- n = 100 ---结束日记---

作业完成后,使用使用来获取结果加载功能。

加载(工作,'X');plot(x)

如果要加载批处理作业中的所有变量,请使用加载没有参数的函数。

当您获取了所有必需的变量后,删除作业对象以清除其数据并避免不必要地消耗资源。

删除(工作);清除工作

请注意,如果您使用脚本文件批处理,MATLAB将所有工作区变量传输到群集中,即使您的脚本不使用它们。大工作空间的数据传输时间可以很大。作为一种最佳实践,将脚本转换为函数文件,以避免这种通信开销。有关使用函数的示例,请参阅运行批处理作业并从工人访问文件

有关更高级的选项批处理, 看运行批处理作业并从工人访问文件

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

准备例子

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

prepare金宝appSupportingFiles;

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

运行批处理工作

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

c = parcluster ();

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

注意,如果您使用批处理发送脚本文件,MATLAB将所有工作区变量转移到集群,即使您的脚本不使用它们。如果您有一个大的工作空间,它会对数据传输时间产生负面影响。作为一种最佳实践,将脚本转换为函数文件,以避免这种通信开销。只需在脚本的开头添加一个函数行就可以做到这一点。为了减少本例中的开销,divideData在此活动脚本之外的文件中定义。

如果您的代码使用并行池,请使用'水池'名称-值对参数创建一个具有指定工人数量的并行池。批处理使用其他工人运行函数本身。

默认,批处理将工作者的初始工作文件夹更改为MATLAB客户端的当前文件夹。控制worker中的初始工作文件夹可能很有用。例如,如果您的集群使用不同的文件系统,因此路径不同,比如当您从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时,您可以使用使用的作业findJob功能。

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

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

检索结果并清理数据

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

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

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

删除(工作)清晰工作

输入参数

全部收缩

要由工作人员评估的MATLAB脚本,指定为字符向量或字符串。

例子:批处理('ascript');

数据类型:字符|字符串

集群,指定为平行的。集群对象,表示集群计算资源。要创建对象,请使用parcluster功能。

例子:cluster = parcluster;批处理(群集,'ascript');

数据类型:平行的。集群

工作人员评估功能,指定为函数句柄或函数名称。

例子:批处理(@ myfunction,1,{x,y});

数据类型:字符|字符串|function_handle.

从被评估的函数期望的输出数fcn,指定为非负整数。

例子:批处理(@ myfunction,1,{x,y});

数据类型:||INT8.|int16|int32|int64|uint8|uint16|uint32|uint64

函数的输入参数fcn,指定为单元数组。

例子:批处理(@ myfunction,1,{x,y});

数据类型:细胞

名称值对参数

指定可选的逗号分离对名称,价值参数。的名字是参数名称和价值是相应的价值。的名字必须出现在引号内。您可以以任何顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:j =批处理(@ myfunction,1,{x,y},'pool',3);

在调用脚本或函数之前工作器上的工作区,指定为逗号分隔的对,由“工作区”还有一个1 × 1结构体。结构的字段名定义变量的名称,字段值被分配给工作区变量。默认情况下,此参数对当前工作空间中的每个变量都有一个字段批处理执行。此参数仅支持运行脚本。金宝app

例子:工作区。myvar# = 5;j =批(“aScript”、“工作空间”,工作空间);

数据类型:塑造

用于标识集群的集群配置文件,由逗号分隔的对组成“配置文件”和一个字符向量或字符串。如果省略此选项,则默认配置文件用于标识群集,并应用于作业和任务属性。

例子:j =批(“aScript”、“配置文件”,“当地”);

数据类型:字符|字符串

要在脚本或函数执行之前添加到工人的MATLAB搜索路径的路径,指定为包含的逗号分隔对'含量径'以及字符向量、字符串数组或字符向量的单元格数组。

worker上的默认搜索路径可能与客户机上的不一样;路径差异可能是不同当前工作文件夹的结果(慢性消耗病),平台或网络文件系统访问。指定'含量径'名称值对参数有助于确保工人在正确的位置查找代码文件,数据文件或模型文件等文件。

您可以使用'含量径'访问共享文件系统中的文件。请注意,路径表示可能因目标机器而异。'含量径'必须是群集中机器所见的路径。例如,如果Z: \数据在本地Windows上®机是/ /数据网络到你的Linux®群集,然后添加后者到'含量径'。如果使用数据存储,请使用'alternedfilesystemroots'而是处理其他的表现。有关更多信息,请参见设置数据存储,用于处理不同的机器或群集

请注意,含量径只有使用相对路径或文件名引用它们时,只能有助于查找文件,而不是绝对路径。

例子:j =批处理(@ myfunction,1,{x,y},'accesspaths','/ network / data /');

数据类型:字符|字符串|细胞

要传输给工人的文件或文件夹,指定为逗号分隔对组成'附加的文件'以及字符向量、字符串数组或字符向量的单元格数组。

例子:j =批处理(@ myfunction,1,{x,y},'contactionfiles','mydata.dat');

数据类型:字符|字符串|细胞

标记将用户在客户端路径上添加的条目添加到工作路径,指定为逗号分隔的对,由'autoaddclientpath'一个逻辑值。

例子:j =批(@myFunction 1 {x, y}, AutoAddClientPath,假);

数据类型:逻辑

标记,以启用依赖关系分析并自动将代码文件附加到作业,指定为逗号分隔的对,由“AutoAttachFiles”一个逻辑值。如果设置为真的,批处理脚本或函数将被分析,它所依赖的代码文件将自动传输给工作者。

例子:j =批处理(@ myfunction,1,{x,y},'autactachfiles',true);

数据类型:逻辑

脚本或函数执行的文件夹,指定为逗号分隔的对组成'currentfolder'和一个字符向量或字符串。不能保证该文件夹在工作者上存在。时,此属性的默认值为MATLAB的当前目录批处理命令执行。如果参数是'。',在批处理执行之前,文件夹没有变化。

例子:j =批处理(@ myfunction,1,{x,y},'currentfolder','。');

数据类型:字符|字符串

标记从函数调用中收集日志,指定为逗号分隔的对,由'Capturediard'一个逻辑值。有关收集的数据的信息,请参见日记

例子:j =批处理('ascript','capturediary',false);

数据类型:逻辑

从客户端会话复制到工人的环境变量,指定为逗号分隔对'环境变量'以及字符向量、字符串数组或字符向量的单元格数组。此处指定的名称被附加到EnvironmentVariables适用的并行配置文件中指定的属性,以形成完整的环境变量列表。未设置的列出的变量不会复制到工人。在批处理作业的持续时间内设置这些环境变量。

例子:j =批(“aScript”、“EnvironmentVariables”、“MY_ENV_VAR”);

数据类型:字符|字符串|细胞

制作进入平行池的工人数量,指定为逗号分隔的对'水池'和:

  • 一个非负整数。

  • 一个非负整数的二元向量,它被解释为一个范围。产生的并行池的大小在请求的范围内尽可能大。

此外,请注意批处理使用另一个worker运行批处理作业本身。

脚本或函数使用此池进行执行语句,例如议案SPMD.在批处理代码中。因为池需要N除了运行批处理的worker外,集群中必须至少有workerN + 1工人。您不需要一个已经在运行的并行池来执行批处理,并且batch创建的新池与您已经打开的池没有关联。有关更多信息,请参见使用并行池运行批处理作业

如果使用默认值,0.,脚本或函数只能运行在单个工作器上,而不能运行在并行池上。

例子:j =批处理(@ myfunction,1,{x,y},'pool',4);

例子:j =批处理(@ myfunction,1,{x,y},'pool',[2,6]);

数据类型:||INT8.|int16|int32|int64|uint8|uint16|uint32|uint64

输出参数

全部收缩

运行脚本或函数的作业,返回为平行的。工作目的。

例子:j =批(“aScript”);

数据类型:平行的。工作

提示

要查看批处理作业的状态或跟踪进度,请使用job Monitor,如中所述监控工作。您还可以使用作业监视器检索在不同会话中创建的批处理作业的作业对象,或者在不返回作业对象的情况下创建的批处理作业批处理称呼。

删除任何批处理作业,您不再需要不必要地消耗群集存储资源。

兼容性考虑因素

全部展开

R2021A中的行为发生了变化

在R2008A介绍