运行parfor for循环

12个视图(30天)
凯利卡尼
凯利卡尼 2015年4月6日
回答: 莫里茨调查2021年6月15日
在早期版本的Matlab,如果我跑parfor循环不先打电话 matlabpool ,它将作为一个串行执行 循环。这使得它很容易运行的部分我的代码无论如何用一个简单的开关。然而,在最近的版本中,默认的偏好是新池时自动开始 parfor 遇到,所以循环并行运行,无论我建立了一个平行池提前。
有办法编程上禁用此行为在运行一个函数?我可以改变我自己的喜好的版本,但是到目前为止我还没有找到一种方法,以确保此设置不活跃当别人他们的电脑上运行的代码。

接受的答案

Edric埃利斯
Edric埃利斯 2015年4月7日
不幸的是没有编程方法改变偏好。你所要做的就是使用可选参数 parfor 指定数量的工人使用。你可以这样做:
%创建一个helper函数来选择PARFOR NumWorkers参数
函数arg = getParforArg ()
gcp (p =“nocreate”);%池对象如果它存在,但从来没有打开一个池
如果isempty (p)
arg = 0;
其他的
arg = p.NumWorkers;
结束
结束
%,PARFOR循环使用。
parfor(idx = 1:10, getParforArg ())
做的东西…
结束
可选参数 parfor 在参考页面描述
2的评论
马特·J
马特·J 2017年5月15日
不幸的是,这种方法不允许您设置断点的身体parfor循环,即使getParforArg()返回0

登录置评。

答案(1)

莫里茨调查
莫里茨调查 2021年6月15日
以防有人遇到这个问题在2021年或之后,似乎把工人的数量设置为零的技巧。例如:
如果功能(“numcores”)> 0
M =功能(“numcores”);
其他的
M = 0;
结束
parfor(M i = 1:10)
%做并行或串行取决于有多少核心
%机器上运行。有用的服务器上运行
%让你决定分配多少cpu。如果你只分配一个,
%这将连续运行。
结束

类别

找到更多的在并行计算原理帮助中心文件交换

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!