parforOptions
为 parfor 设置的选项
说明
使用池对象 opts = parforOptions(pool)pool 为 parfor 创建一组选项。
当您创建多个池时,使用此语法指定在哪个池上运行 parfor 循环。
提示
当您运行 parfor 循环时,如果有可用并行池,MATLAB® 会自动使用并行池来运行循环。
如果您只需要使用默认集群配置文件或可用的并行池运行 parfor 循环,请考虑使用 parfor loopVar=initVal:endval; statements; end 语法,而不是使用 parforOptions。
使用一个或多个名称-值参量为 opts = parforOptions(___,Name,Value)parfor 创建一组选项。例如,使用 parforOptions(pool,"MaxNumWorkers",M) 运行使用池对象 parfor 和最多 pool 个工作单元的 M 循环。在所有其他输入参量之后指定名称-值参量。
示例
使用 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 将迭代分为四组迭代,分别为 2、1、1 和 2。
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 选项创建一个集群对象。使用 parfor 函数通过集群对象创建一组 parforOptions 选项。要将文件传输给工作单元,请使用 '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。要获取后台池,请使用
backgroundPool。
示例: 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",则parforOptions将parfor循环迭代划分为固定大小的子范围。使用此方法时,还必须使用SubrangeSize名称-值参量来指定子范围大小。如果
RangePartitionMethod是函数句柄,则parforOptions使用函数句柄将parfor循环迭代划分为固定大小的子范围。该函数以
sizes = customFcn(n,nw)的形式运行函数句柄。n是parfor循环中的迭代次数。nw是可用于运行循环的工作单元数量。当您使用池运行循环时,
nw是并行池中的工作单元数量。当您使用集群运行不带池的循环时,nw是集群的NumWorkers属性。sizes是子范围大小的整数向量。对于n和nw的任何值,向量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 循环时,文件夹将添加到工作单元的搜索路径中。当 parfor 循环完成时,这些文件夹将从工作单元的搜索路径中删除。
如果客户端和工作单元到同一个文件夹的路径不同,请使用工作单元上的路径指定该文件夹。例如,如果文件夹的路径在客户端上为 /shared/data,而在工作单元上为 /organization/shared/data,则指定 "/organization/shared/data"。
如果指定相对路径(如 "../myFolder"),则该路径将相对于工作单元上的当前工作目录进行解析。
指定 AdditionalPaths 以避免不必要地从客户端向工作单元复制文件。仅当文件在工作单元上可用时才指定 AdditionalPaths。如果文件不可用,则使用 AttachedFiles 将文件发送给工作单元。
示例: opts = parforOptions(cluster,"AdditionalPaths",["/additional/path1","/additional/path2"])
要发送给每个运行 parfor 循环的工作单元的文件和文件夹,指定为字符向量、字符串标量、字符串数组或字符向量元胞数组。
默认值是一个空元胞数组。
当您运行 parfor 循环时,文件和文件夹将被发送给工作单元。当 parfor 循环完成时,这些文件和文件夹将从每个工作单元的文件系统中删除。
如果指定相对路径(例如 "../myFolder"),则路径将相对于客户端上的当前工作目录进行解析。
如果文件在工作单元上可用,则指定 AdditionalPaths。当您指定 AdditionalPaths 时,您可以避免不必要地将文件从客户端复制到工作单元。
用于将客户端路径发送给工作单元的标志,指定为 true 或 false。
如果将 AutoAddClientPath 指定为 true,则运行 parfor 循环时,用户添加的条目将添加到每个工作单元的路径中。当 parfor 循环完成时,这些条目将从每个工作单元的路径中删除。
标志自动将文件复制到工作单元,指定为 true 或 false。
当您将计算卸载到工作单元时,客户端上计算所需的任何文件也必须在工作单元上可用。如果将 AutoAttachFiles 指定为 true,客户端将尝试自动检测并附加此类文件。如果将 AutoAttachFiles 指定为 false,则会关闭客户端上的自动检测。如果自动检测无法找到所有文件,或者从客户端向工作单元发送文件的速度很慢,请使用以下参量。
如果文件位于工作单元无法访问的文件夹中,请使用
AttachedFiles参量指定文件。集群将您指定的每个文件从客户端复制到工作单元。如果文件位于工作单元可访问的文件夹中,则可以改用
AdditionalPaths参量。使用AdditionalPaths参量将路径添加到每个工作单元的 MATLAB 搜索路径,并避免不必要地从客户端复制到工作单元。
当您运行 parfor 循环时,自动检测到的文件会被发送给工作单元。当 parfor 循环完成时,这些文件和文件夹将从每个工作单元的文件系统中删除。
池名称-值参量
最大工作单元数量,指定为正整数标量。
默认值为 Inf。
如果您将
MaxNumWorkers指定为一个有限正整数,那么parfor循环将以最多MaxNumWorkers个工作单元运行。如果您将
MaxNumWorkers指定为Inf,则parfor循环将会使用尽可能多的可用工作单元运行。
扩展功能
该函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
版本历史记录
在 R2019a 中推出
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)