Main Content

本页采用了机器翻译。点击此处可查看英文原文。

parforOptions

parfor 设置的选项

说明

opts = parforOptions(cluster) 使用集群对象 clusterparfor 创建一组选项。要为 parfor 循环指定选项,请使用 parfor (loopVar=initVal:endval, opts); statements; end 语法。

示例

opts = parforOptions(pool) 使用池对象 poolparfor 创建一组选项。

当您创建多个池时,使用此语法指定在哪个池上运行 parfor 循环。

提示

当您运行 parfor 循环时,如果有可用并行池,MATLAB® 会自动使用并行池来运行循环。

如果您只需要使用默认集群配置文件或可用的并行池运行 parfor 循环,请考虑使用 parfor loopVar=initVal:endval; statements; end 语法,而不是使用 parforOptions

示例

opts = parforOptions(___,Name,Value) 使用一个或多个名称-值参量为 parfor 创建一组选项。例如,使用 parforOptions(pool,"MaxNumWorkers",M) 运行使用池对象 pool 和最多 M 个工作进程的 parfor 循环。在所有其他输入参量之后指定名称-值参量。

示例

示例

全部折叠

使用 parcluster 函数创建一个集群对象,并使用它创建一组 parfor 选项。默认情况下,parcluster 使用您的默认集群配置文件。在 MATLAB® 主页选项卡上的并行 > 选择并行环境中检查您的默认配置文件。

cluster = parcluster;
opts = parforOptions(cluster);

要在集群中直接运行 parfor 计算,请将 parfor 选项作为第二个输入参量传递给 parfor

当您使用此方法时,parfor 可以使用集群中所有可用的工作进程,并且循环完成后工作进程即可使用。如果您的集群不支持并行池,这种方法也很有用。

values = [3 3 3 7 3 3 3];
parfor (i=1:numel(values),opts)
    out(i) = norm(pinv(rand(values(i)*1e3)));
end

使用此语法在大型集群上运行 parfor,而无需消耗超过必要时间的工作进程。

您可以控制 parfor 如何用 parforOptions 将迭代划分为工作进程范围。控制范围分区可以优化 parfor 循环的性能。为了获得最佳性能,请尝试拆分为以下子范围:

  • 足够大,以至于计算时间与调度子范围的开销相比很大

  • 足够小,有足够的子范围来让所有工作进程忙碌

要将迭代划分为固定大小的子范围,请创建一组 parfor 选项,将 'RangePartitionMethod' 设置为 'fixed',并使用 'SubrangeSize' 指定子范围大小。

opts = parforOptions(parcluster,'RangePartitionMethod','fixed','SubrangeSize',2);

parfor 选项作为第二个输入参量传递给 parfor。在这种情况下,parfor 将迭代分为三组 2 迭代。

values = [3 3 3 3 3 3];
parfor (i=1:numel(values),opts)
    out(i) = norm(pinv(rand(values(i)*1e3)));
end

要将迭代划分为不同大小的子范围,请将函数句柄传递给 'RangePartitionMethod' 名称-值对。该函数必须返回一个子范围大小的向量,并且它们的总和必须等于迭代次数。有关此语法的更多信息,请参阅 RangePartitionMethod

opts = parforOptions(parcluster,'RangePartitionMethod', @(n,nw) [2 1 1 2]);

parfor 选项作为第二个输入参量传递给 parfor。在这种情况下,parfor 将迭代分为四组迭代,分别为 2112

values = [3 3 7 7 3 3];
parfor (i=1:numel(values),opts)
    out(i) = norm(pinv(rand(values(i)*1e3)));
end

您可以使用 parforOptions 在并行池的工作进程上运行 parfor。当您想要为 parfor- 循环保留固定数量的工作进程时,请使用这种方法。您还可以更精细地控制 parfor 如何为工作进程划分迭代。

使用 parpool 函数创建并行池。默认情况下,parpool 使用您的默认配置文件。在 MATLAB 主页选项卡上的并行 > 选择并行环境中检查您的默认配置文件。使用并行池对象创建一组 parfor 选项,并指定选项。例如,指定固定大小的子范围 2 作为分区方法。

p = parpool;
Starting parallel pool (parpool) using the 'Processes' profile ...
Connected to the parallel pool (number of workers: 6).
opts = parforOptions(p,'RangePartitionMethod','fixed','SubrangeSize',2);

parfor 选项作为第二个输入参量传递给 parfor 函数。parfor 在并行池上运行循环体,并根据 opts 划分迭代。

values = [3 3 3 3 3 3];
parfor (i=1:numel(values),opts)
    out(i) = norm(pinv(rand(values(i)*1e3)));
end

当您运行带有或不带有并行池的 parfor 时,默认情况下,MATLAB 会对循环体执行自动依赖性分析。MATLAB 在运行语句之前将所需文件传输给工作进程。在某些情况下,您必须明确地将这些文件传输给工作进程。有关详细信息,请参阅确定程序依赖项

如果您使用没有并行池的 parfor,请使用 parforOptions 来传输文件。使用 parcluster 选项创建一个集群对象。使用 parforOptions 函数通过集群对象创建一组 parfor 选项。要将文件传输给工作进程,请使用 'AttachedFiles' 名称-值对。

cluster = parcluster;
opts = parforOptions(cluster,'AttachedFiles',{'myFile.dat'});

parfor 选项作为第二个输入参量传递给 parfor 函数。工作进程可以在循环体中访问所需的文件。

parfor (i=1:2,opts)
    M = csvread('myFile.dat',0,2*(i-1),[0,2*(i-1),1,1+2*(i-1)]);
    out(i) = norm(rand(ceil(norm(M))*1e3));
end

输入参数

全部折叠

集群,指定为 parallel.Cluster 对象。要创建集群对象,请使用 parcluster

示例: parcluster('Processes');

池,指定为 parallel.Pool 对象。

示例: parpool('Processes');

示例: backgroundPool;

名称-值参数

将可选参量对指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是相应的值。名称-值参量必须出现在其他参量之后,但对的顺序并不重要。

在 R2021a 之前,使用逗号分隔每个名称和值,并将 Name 括在引号中。

示例: opts = parforOptions(cluster,"AttachedFiles","myFile.dat");

所有对象类型

全部折叠

将迭代划分为子范围的方法,指定为 "auto""fixed" 或函数句柄。子范围是循环迭代的连续块,parfor 在工作进程上作为一个组运行。使用此参量通过指定迭代如何在各个工作进程之间分布来优化 parfor 循环的性能。

  • 如果 RangePartitionMethod"auto" 或者您未指定值,则 parforOptions 会将 parfor 循环迭代划分为不同大小的子范围,以寻求各种 parfor 循环的良好性能。

  • 如果 RangePartitionMethod"fixed",则 parforOptionsparfor 循环迭代划分为固定大小的子范围。使用此方法时,还必须使用 SubrangeSize 名称-值参量来指定子范围大小。

  • 如果 RangePartitionMethod 是函数句柄,则 parforOptions 使用函数句柄将 parfor 循环迭代划分为固定大小的子范围。

    该函数以 sizes = customFcn(n,nw) 的形式运行函数句柄。

    • nparfor 循环中的迭代次数。

    • nw 是可用于运行循环的工作进程数量。

      当您使用池运行循环时,nw 是并行池中的工作进程数量。当您使用集群运行不带池的循环时,nw 是集群的 NumWorkers 属性。

    • sizes 是子范围大小的整数向量。对于 nnw 的任何值,向量 sizes 的和必须等于 n

示例: parforOptions(cluster,"RangePartitionMethod","auto")

示例: parforOptions(cluster,"RangePartitionMethod",@(n,nw) ones(1,n))

子范围内的最大迭代次数,指定为正整数标量。子范围是循环迭代的连续块,parfor 在工作进程上作为一个组运行。

使用此参量时,必须将 RangePartitionMethod 参量指定为 "fixed"

示例: parforOptions(cluster,"RangePartitionMethod","fixed","SubrangeSize",5)

集群名称-值参量

全部折叠

要添加到运行 parfor 循环的每个工作进程的 MATLAB 搜索路径的文件夹,指定为字符向量、字符串标量、字符串数组或字符向量单元格数组。

默认值是一个空单元格数组。

当您运行 parfor-loop 时,文件夹将添加到工作进程的搜索路径中。当 parfor 循环完成时,这些文件夹将从工作进程的搜索路径中删除。

如果客户端和工作进程到同一个文件夹的路径不同,请使用工作进程上的路径指定该文件夹。例如,如果文件夹的路径在客户端上为 /shared/data,而在工作进程上为 /organization/shared/data,则指定 "/organization/shared/data"

如果指定相对路径(如 "../myFolder"),则该路径将相对于工作进程上的当前工作目录进行解析。

指定 AdditionalPaths 以避免不必要地从客户端向工作进程复制文件。仅当文件在工作进程上可用时才指定 AdditionalPaths。如果文件不可用,则使用 AttachedFiles 将文件发送给工作进程。

示例: opts = parforOptions(cluster,"AdditionalPaths",["/additional/path1","/additional/path2"])

要发送给每个运行 parfor 循环的工作进程的文件和文件夹,指定为字符向量、字符串标量、字符串数组或字符向量单元格数组。

默认值是一个空单元格数组。

当您运行 parfor-loop 时,文件和文件夹将被发送给工作进程。当 parfor 循环完成时,这些文件和文件夹将从每个工作进程的文件系统中删除。

如果指定相对路径(例如 "../myFolder"),则路径将相对于客户端上的当前工作目录进行解析。

如果文件在工作进程上可用,则指定 AdditionalPaths。当您指定 AdditionalPaths 时,您可以避免不必要地将文件从客户端复制到工作进程。

用于将客户端路径发送给工作进程的标志,指定为 truefalse

如果将 AutoAddClientPath 指定为 true,则运行 parfor 循环时,用户添加的条目将添加到每个工作进程的路径中。当 parfor 循环完成时,这些条目将从每个工作进程的路径中删除。

标志自动将文件复制到工作进程,指定为 truefalse

当您将计算卸载到工作进程时,客户端上计算所需的任何文件也必须在工作进程上可用。如果将 AutoAttachFiles 指定为 true,客户端将尝试自动检测并附加此类文件。如果将 AutoAttachFiles 指定为 false,则会关闭客户端上的自动检测。如果自动检测无法找到所有文件,或者从客户端向工作进程发送文件的速度很慢,请使用以下参量。

  • 如果文件位于工作进程无法访问的文件夹中,请使用 AttachedFiles 参量指定文件。集群将您指定的每个文件从客户端复制到工作进程。

  • 如果文件位于工作进程可访问的文件夹中,则可以改用 AdditionalPaths 参量。使用 AdditionalPaths 参量将路径添加到每个工作进程的 MATLAB 搜索路径,并避免不必要地从客户端复制到工作进程。

当您运行 parfor-loop 时,自动检测到的文件会被发送给工作进程。当 parfor 循环完成时,这些文件和文件夹将从每个工作进程的文件系统中删除。

池名称-值参量

全部折叠

最大工作进程数量,指定为正整数标量。

默认值为 Inf

  • 如果您将 MaxNumWorkers 指定为一个有限正整数,那么 parfor 循环将以最多 MaxNumWorkers 个工作进程运行。

  • 如果您将 MaxNumWorkers 指定为 Inf,则 parfor 循环将会使用尽可能多的可用工作进程运行。

扩展功能

版本历史记录

在 R2019a 中推出