主要内容

parpool

在集群上创建并行池

描述

例子

parpool使用默认配置文件启动并行工作池。默认首选项,MATLAB®在本地机器上启动一个池,每个物理CPU核心有一个worker,直到首选的worker数量。有关并行首选项的更多信息,请参见指定你的并行偏好

通常,池大小由并行首选项和默认配置文件指定。parpool属性在默认概要文件上创建一个池NumWorkers在范围内[1, preferredNumWorkers]用于运行并行语言特性。preferredNumWorkers在并行首选项中定义的值。有关所有可能影响您的泳池大小的因素,请参阅池大小和群集选择

parpool通过在工作池上创建一个特殊的作业,并将MATLAB客户端连接到并行池,从而实现MATLAB中并行语言特性的全部功能。并行语言特性包括parforparfevalparfevalOnAllspmd,分布式.如果可能,将worker上的工作文件夹设置为与MATLAB客户端会话的工作文件夹匹配。

例子

parpool (poolsize创建并返回具有指定数量的工作人员的池。poolsize可以是正整数或指定为2元素整数向量的范围。如果poolsize为范围,则生成的池的大小在请求的范围内尽可能大。

指定poolsize覆盖在首选项或概要文件中指定的工作者数量,并启动一个具有相同数量的工作者的池,即使必须等待它们可用。大多数集群都有可以启动的最大worker数量。如果概要文件指定MATLAB作业调度器群集,则parpool从MATLAB Job Scheduler下已经运行和可用的worker中保留它的worker。如果概要文件指定了本地或第三方调度器,parpool指示调度程序启动池的作业。

例子

parpool (资源parpool (资源poolsize在指定的资源上启动工作池资源

例子

parpool (___名称,值在启动池时为某些属性应用指定的值。

例子

poolobj= parpool (___返回一个平行的。池对象设置为表示集群上的池的客户机工作区。您可以使用池对象以编程方式删除池或访问其属性。使用删除(池)关闭平行池。

例子

全部折叠

使用默认配置文件来启动并行池,以定义工作人员的数量。使用默认首选项,默认池位于本地机器上。

parpool

您可以在本地机器上的不同类型的并行环境上创建池。

  • 启动流程工作者的并行池。

    parpool (“过程”
  • 启动线程工作者的并行池。

    parpool (“线程”

有关并行环境的更多信息,请参见选择基于线程的环境和基于进程的环境

使用名为。的配置文件启动一个16个工作人员的并行池myProf

parpool (“myProf”, 16)

创建一个表示默认概要文件标识的集群的对象,并使用该集群对象启动一个并行池。池大小由默认配置文件决定。

C = parcluster (C)

使用默认配置文件启动并行池,并将两个代码文件传递给worker。

parpool (“AttachedFiles”, {“mod1.m”“mod2.m”})

如果您可以访问多个gpu,则可以使用并行池在多个gpu上并行执行计算。

若要确定可在MATLAB中使用的gpu数量,请使用gpuDeviceCount函数。

availableGPUs = gpuDeviceCount(“可用”
availableGPUs = 3

用尽可能多的可用gpu启动一个并行池。为了获得最佳性能,MATLAB默认为每个worker分配不同的GPU。

parpool (“过程”, availableGPUs);
使用'Processes'配置文件启动并行池(parpool)…连接到并行池(工人数:3)。

要识别每个工作人员使用的GPU,请调用gpuDevice在一个spmd块。的spmd块运行gpuDevice每个工人身上。

spmdgpuDevice结束

使用并行语言特性,例如parforparfeval,将计算分发给并行池中的工作人员。如果你使用gpuArray在你的计算中启用函数,这些函数在worker的GPU上运行。有关更多信息,请参见在图形处理器上运行MATLAB函数.有关示例,请参见在多gpu上运行MATLAB函数

完成计算后,关闭并行池。您可以使用gcp函数获取当前的并行池。

删除(gcp (“nocreate”));

如果你想使用不同的gpu选择,那么你可以使用gpuDevice来选择每个worker上的特定GPU,使用GPU设备索引。方法可以获取系统中每个GPU设备的索引gpuDeviceCount函数。

假设您的系统中有三个可用的gpu,但您希望只使用两个gpu进行计算。获取设备的索引。

[availableGPUs,gpuIndx] = gpuDeviceCount(“可用”
availableGPUs = 3
gpuIndx =1×31 2 3

定义要使用的设备的索引。

useGPUs = [1 3];

开始你的平行泳池。使用一个spmd块和gpuDevice使用设备索引将每个worker与你想要使用的一个gpu关联起来。的spmdIndex函数标识每个worker的索引。

parpool (“过程”元素个数(useGPUs));
使用'Processes'配置文件启动并行池(parpool)…连接到并行池(工人数:2)。
spmdgpuDevice (useGPUs (spmdIndex));结束

作为最佳实践,为了获得最佳性能,为每个worker分配不同的GPU。

完成计算后,关闭并行池。

删除(gcp (“nocreate”));

使用默认配置文件创建并行池,然后再删除。

Poolobj = parpool;删除(poolobj)

找出当前并行池中的工人数量。

Poolobj = gcp(“nocreate”);%如果没有存储池,则不创建新的存储池。如果Isempty (poolobj) poolsize = 0;其他的Poolsize = poolobj。NumWorkers结束

输入参数

全部折叠

并行池的大小,指定为正整数或指定为2元素整数向量的范围。如果poolsize为范围,则生成的池的大小在请求的范围内尽可能大。在并行首选项或并行配置文件中设置默认的首选工人数量。

例子:parpool('过程',2)

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

用于启动池的资源,指定为“过程”“线程”、集群配置文件名称或集群对象。

例子:parpool(“流程”)

例子:parpool(“线程”)

例子:parpool (myClusterProfile, 16)

例子:C = parcluster;parpool (c)

数据类型:字符|字符串|平行的。集群

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子:AttachedFiles, {' myFun.m '}

要附加到池的文件,指定为字符向量、字符串或字符串数组或字符向量的单元格数组。

有了这个参数对,parpool启动并行池并将标识的文件传递给池中的工作者。文件中指定的文件被追加到AttachedFiles属性,以形成附加文件的完整列表。的“AttachedFiles”属性名称区分大小写,必须如下所示。

例子:{“myFun.m”、“myFun2.m”}

数据类型:字符|细胞

标志,指定用户在客户端路径上添加的条目是否在启动时添加到每个工作者的路径中,作为逻辑值指定。

数据类型:逻辑

要从客户端会话复制到工作者的环境变量的名称,指定为字符向量、字符串或字符串数组或字符向量的单元格数组。属性中指定的名称被追加到“EnvironmentVariables”属性,以形成完整的环境变量列表。列出的任何未设置的变量都不会复制到worker中。这些环境变量是在并行池运行期间在工作线程上设置的。

数据类型:字符|细胞

标志,指定spmd在池上启用支持,指定为逻辑值。只能在本地或MATLAB作业调度器群集上禁用支持。parfor迭代不涉及工作人员之间的交流。因此,如果“SpmdEnabled”,一个parfor即使一个或多个worker在循环执行期间中止,-loop也会继续。

数据类型:逻辑

空闲时池关闭的时间(以分钟为单位),指定为大于零的整数。如果一个池没有在worker上运行代码,那么它就是空闲的。默认情况下“IdleTimeout”与并行首选项中的值相同。有关并行首选项的更多信息,请参见指定你的并行偏好

例子:pool = parpool('IdleTimeout',120)

输出参数

全部折叠

从客户端访问并行池,返回为平行的。池对象。

提示

  • 桌面左下角的池状态指示灯显示客户端与池的会话连接和池的状态。单击图标以查看支持的池操作菜单。

    游泳池正在运行:没有运行池:

  • 如果将并行首选项设置为在必要时自动创建并行池,则不需要显式调用parpool命令。您可以显式地创建一个池来控制设置它的开销时间,这样池就可以用于后续的并行语言构造。

  • 删除(poolobj)关闭并行池。如果没有平行池,spmd而且parfor在客户端中作为单个线程运行,除非您的并行首选项设置为自动为它们启动并行池。

  • 当您使用MATLAB编辑器更新客户机上附加到并行池的文件时,这些更新将自动传播到池中的工作线程。(此自动更新不适用于Simulink®模型文件。要将更新的模型文件传播给工作者,请使用updateAttachedFiles函数)。

  • 如果可能,首先将工作目录设置为与MATLAB客户端会话相匹配。随后,在客户端命令窗口中输入的以下命令也会在池中的所有工人上执行:

    此行为允许您在所有工作者上设置工作文件夹和命令搜索路径,以便后续的池活动,例如parfor-loops在适当的上下文中执行。

    在更改文件夹或添加路径时使用cd目录Windows客户端®如果可能的话,发送给worker的值是文件夹的UNC路径。Linux客户端®在操作系统中,它是文件夹的绝对位置。

    如果这些命令中的任何一条在客户机上不起作用,那么它也不会在worker上执行。例如,如果目录指定客户端不能访问的文件夹目录命令不会在worker上执行。但是,如果工作文件夹可以在客户端上设置,但不能在任何工作程序上设置,则不会向客户端命令窗口返回错误消息。

    在混合平台环境中,客户端与工作者不是同一个平台,客户端本地文件夹或从客户端映射的文件夹不能以相同的方式对工作者可用,或者文件夹位于非共享文件系统中,请注意这种轻微的行为差异。例如,如果您有一个运行在Microsoft上的MATLAB客户机®而MATLAB的工作程序都运行在Linux操作系统上,同样的道理目录不能同时工作。在这种情况下,您可以使用该函数pctRunOnAll确保对所有工人都有命令。

    客户和工人之间的另一个区别是任何目录参数的一部分matlabroot文件夹上没有设置。假设MATLAB安装库已经包含在工作路径中。的规则目录关于池中的工作人员有:

    • 的子文件夹matlabroot文件夹不发送给工人。

    • 项第一次出现之前出现的任何文件夹matlabroot文件夹被添加到工作者路径的顶部。

    • 项第一次出现之后出现的任何文件夹matlabroot文件夹后添加matlabroot工作路径上的文件夹组。

    例如,假设matlabroot客户端的是C: \应用matlab \ \.对于一个开放的并行池,执行以下命令在客户端和所有worker上设置路径:

    目录“P1”“P2”“C: \ matlab应用程序\ \ T3”“C: \ matlab应用程序\ \ T4”“P5”“C: \ matlab应用程序\ \ T6”“P7”“P8”);

    因为T3T4,T6的子文件夹matlabroot他们没有在工人的道路上设置。因此,在worker上,由这个命令产生的路径的相关部分是:

    P1 P2  p5 p7 p8
  • 如果你正在使用麦金塔电脑或Linux,并参见大型并行池创建期间的问题,请参见Macintosh和Linux的推荐系统限制

版本历史

在R2013b中引入

全部展开

Baidu
map