我想知道是否可以在parfor级别指定最大工人数量?
我知道如何更改matlab并行池中的工作人员数量,但我希望快速和动态地更改分配给parfor循环的工作人员。
理性: 我有一些长时间运行的parfor循环,有时奇数个工作,比如5,会让一个等待其他4个工作在最后一个之前完成一开始,与仅并行运行全部5相比,这是非常缓慢的。我想要的是一些代码,可以确定是否有5个作业,并行运行全部5个,但如果有6个,可能运行2个3个作业是更好的设置,因此我们使用限制本案例为3名工人,但前者为6名。
关闭并重新启动并行池以实现此目的是相当缓慢和烦人的。如果有一种方法可以启动10个工作人员,并动态决定在运行时使用哪个工作效率最高,那么就可以解决问题。
答案 0 :(得分:2)
根据the documentation,parfor
还有第二种语法:
parfor (loopvar = initval:endval, M)
statements
end
这将使用最多M
个worker来执行循环内的语句:
使用
M
指定将评估parfor
- 循环体中语句的最大MATLAB工作者数。M
必须是非负整数。默认情况下,MATLAB使用尽可能多的工作人员。如果指定了上限,则MATLAB不会使用该数字,即使有其他工作人员可用。如果您请求的资源多于可用资源,MATLAB将使用呼叫时可用的最大数量。