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)
运行使用池对象 pool
和最多 M
个工作进程的 parfor
循环。在所有其他输入参量之后指定名称-值参量。
示例
在没有并行池的集群上运行 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
范围分区
您可以控制 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
在并行池上运行 parfor
并控制选项
您可以使用 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
工作人员
当您运行带有或不带有并行池的 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
输入参数
cluster
— 集群
parallel.Cluster
对象
集群,指定为 parallel.Cluster
对象。要创建集群对象,请使用 parcluster
。
示例: parcluster('Processes');
pool
— 池
parallel.Pool
对象
池,指定为 parallel.Pool
对象。
要创建并行池,请使用
parpool
。要获取后台池,请使用
backgroundPool
。
示例: parpool('Processes');
示例: backgroundPool;
名称-值参数
将可选参量对指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是相应的值。名称-值参量必须出现在其他参量之后,但对的顺序并不重要。
在 R2021a 之前,使用逗号分隔每个名称和值,并将 Name
括在引号中。
示例: opts = parforOptions(cluster,"AttachedFiles","myFile.dat");
RangePartitionMethod
— 将迭代划分为子范围的方法
"auto"
(默认) | "fixed"
| 函数句柄
将迭代划分为子范围的方法,指定为 "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))
SubrangeSize
— 子范围内的最大迭代次数
正整数标量
子范围内的最大迭代次数,指定为正整数标量。子范围是循环迭代的连续块,parfor
在工作进程上作为一个组运行。
使用此参量时,必须将 RangePartitionMethod
参量指定为 "fixed"
。
示例: parforOptions(cluster,"RangePartitionMethod","fixed","SubrangeSize",5)
AdditionalPaths
— 要添加到每个工作进程的 MATLAB 搜索路径的文件夹
字符向量 | 字符串标量 | 字符串数组 | 元胞数组
要添加到运行 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"])
AttachedFiles
— 发送给每个工作进程的文件和文件夹
字符向量 | 字符串标量 | 字符串数组 | 元胞数组
要发送给每个运行 parfor
循环的工作进程的文件和文件夹,指定为字符向量、字符串标量、字符串数组或字符向量单元格数组。
默认值是一个空单元格数组。
当您运行 parfor
-loop 时,文件和文件夹将被发送给工作进程。当 parfor
循环完成时,这些文件和文件夹将从每个工作进程的文件系统中删除。
如果指定相对路径(例如 "../myFolder"
),则路径将相对于客户端上的当前工作目录进行解析。
如果文件在工作进程上可用,则指定 AdditionalPaths
。当您指定 AdditionalPaths
时,您可以避免不必要地将文件从客户端复制到工作进程。
AutoAddClientPath
— 标记以将客户端路径发送给工作进程
true
(默认) | false
用于将客户端路径发送给工作进程的标志,指定为 true
或 false
。
如果将 AutoAddClientPath
指定为 true
,则运行 parfor
循环时,用户添加的条目将添加到每个工作进程的路径中。当 parfor
循环完成时,这些条目将从每个工作进程的路径中删除。
AutoAttachFiles
— 标记以自动将文件复制到工作进程
true
(默认) | false
标志自动将文件复制到工作进程,指定为 true
或 false
。
当您将计算卸载到工作进程时,客户端上计算所需的任何文件也必须在工作进程上可用。如果将 AutoAttachFiles
指定为 true
,客户端将尝试自动检测并附加此类文件。如果将 AutoAttachFiles
指定为 false
,则会关闭客户端上的自动检测。如果自动检测无法找到所有文件,或者从客户端向工作进程发送文件的速度很慢,请使用以下参量。
如果文件位于工作进程无法访问的文件夹中,请使用
AttachedFiles
参量指定文件。集群将您指定的每个文件从客户端复制到工作进程。如果文件位于工作进程可访问的文件夹中,则可以改用
AdditionalPaths
参量。使用AdditionalPaths
参量将路径添加到每个工作进程的 MATLAB 搜索路径,并避免不必要地从客户端复制到工作进程。
当您运行 parfor
-loop 时,自动检测到的文件会被发送给工作进程。当 parfor
循环完成时,这些文件和文件夹将从每个工作进程的文件系统中删除。
MaxNumWorkers
— 最大工作进程数
正整数标量
最大工作进程数量,指定为正整数标量。
默认值为 Inf
。
如果您将
MaxNumWorkers
指定为一个有限正整数,那么parfor
循环将以最多MaxNumWorkers
个工作进程运行。如果您将
MaxNumWorkers
指定为Inf
,则parfor
循环将会使用尽可能多的可用工作进程运行。
扩展功能
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
该函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
版本历史记录
在 R2019a 中推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)