use*_*923 11 parallel-processing matlab parfor
当我parfor在我的代码中安装并使用并行计算工具箱时,MATLAB一旦到达parfor循环就会自动启动它.然而,这有时难以调试,这就是为什么我想阻止MATLAB在某些情况下打开池.那么,我怎么能告诉MATLAB不要打开池?显然我可以通过我的代码并删除所有parfor循环并用普通for循环替换它们,但这很乏味,我可能会忘记撤消我的更改.
编辑:为了指定,我理想地希望parfor循环在设置控件或变量或其他东西时的行为与for完全相同.也就是说,我应该也能够在for循环中放置断点.
在Home-> parallel-> parallel preferences下,您可以取消选中"在执行并行关键字时自动创建并行池(如果尚不存在)"复选框.这使得所有parfor循环都表现为普通for循环.
如果我在代码中找到一种方法,而不是使用复选框,我会回复你.
更新结果确实可以通过代码更改设置,虽然我不建议这样做,因为它涉及更改MATLAB的首选项文件.这取自Yair Altman 的未记载的MATLAB博客.
ps = parallel.Settings;
ps.Pool
ans =
PoolSettings with properties:
AutoCreate: 1
RestartOnClusterChange: 1
RestartOnPreferredNumWorkersChange: 1
IdleTimeout: 30
PreferredNumWorkers: 12
Run Code Online (Sandbox Code Playgroud)
您需要将AutoCreate开关更改为的位置0.
作为替代方案,我建议将所有内容包装parfor在函数中,从而调用
parfor 1:N
output = function(..)
end
Run Code Online (Sandbox Code Playgroud)
现在修改您的脚本/功能以Parallel在顶部切换:
if Parallel
parfor 1:N
output = function(..)
end
else
for 1:N
output = function(..)
end
end
Run Code Online (Sandbox Code Playgroud)
您可以编辑和调试function自身,并将您的开关设置在程序之上,以并行或串行方式执行.
以及正常的语法
parfor i = 1:10
Run Code Online (Sandbox Code Playgroud)
你也可以用
parfor (i = 1:10, N)
Run Code Online (Sandbox Code Playgroud)
N循环中使用的最大工作线数在哪里.N可以是由代码的其他部分设置的变量,因此您可以通过将变量设置N为1或0 来有效地打开和关闭并行性.
编辑:要清楚,这仅控制执行代码的工作者数量(如果N为零,则是否完全启动池).如果不存在池,则代码将在客户端上执行.尽管如此,代码仍然是一个parfor循环,它与循环没有相同的语义for- 对parfor循环不存在的for循环的循环代码有限制,并且不能保证循环迭代的执行顺序.
当你使用时parfor,你所做的不仅仅是说"请加快速度".您对MATLAB说:"我可以向您保证,此循环的迭代是独立的,并且可以按任何顺序执行,因此如果您尝试并行化它就会没问题".因为你已经保证,MATLAB能够通过使用与for循环相比不同的语义来加快速度.
完全获取for循环行为的唯一方法是使用for,如果需要来回切换以进行调试,则需要对for/ 进行注释和取消注释parfor(或者使用if/ elseblock,在a for和a 之间切换,parfor具体取决于某些变量).
| 归档时间: |
|
| 查看次数: |
602 次 |
| 最近记录: |