转换为
循环进入parfor
循环
在某些情况下,必须修改代码才能进行转换为
循环,parfor
循环。这个例子展示了如何诊断和修复parfor
循环问题使用简单的嵌套为
循环。在MATLAB中运行此代码®并检查结果。
为X = 0:0.1:1为y = 2:10 A(y) = A(y-1) + y;结束结束
为了加快代码的速度,请尝试转换为
循环,parfor
循环。注意,这段代码会产生错误。
parforX = 0:0.1:1parfory = 2:10 A(y) = A(y-1) + y;结束结束
在这种情况下,不能简单地转换为
循环,parfor
-loops不做修改。要做到这一点,必须在几个地方更改代码。要诊断问题,请在MATLAB编辑器中查找代码分析器消息。
这段代码显示了在尝试转换时常见的问题为
循环,parfor
循环。
要解决这些问题,必须修改要使用的代码parfor
.的主体parfor
-loop在并行池中使用多个MATLAB worker以不确定的顺序执行。因此,您必须满足这些要求的主体parfor
循环:
的主体
parfor
-loop必须是独立的。一个循环迭代不能依赖于前一个迭代,因为迭代是以不确定的顺序并行执行的。在这个例子中,A(y) = A(y-1) + y;
parfor
.有关处理独立性问题的下一步步骤,请参见确保parfor-Loop迭代是独立的.不能嵌套
parfor
-循环在另一个parfor
循环。这个例子有两个嵌套为
-loops,因此只能替换一个为
带a的-循环parfor
循环。相反,您可以调用一个使用parfor
-loop在另一个的体内parfor
循环。然而,这样的嵌套parfor
-loops不会给你带来计算上的好处,因为所有的worker都被用来并行化最外层的循环。有关处理嵌套循环的帮助,请参见嵌套的parfor和for-Loops和其他parfor需求.parfor
-loop变量必须是连续递增的整数。在这个例子中,parforX = 0:0.1:1
parfor
在这里。您可以通过将循环变量的值更改为算法所需的整数值来解决此问题。用于故障排除的后续步骤parfor
-loop变量,参见确保parfor-Loop变量是连续递增的整数.你无法摆脱
parfor
-尽早循环,就像你可以在为
循环。的正文中不包含return或break语句parfor
循环。如果没有通信,运行循环的其他MATLAB实例不知道何时停止。作为替代方案,请考虑parfeval
.如果你仍然有问题转换
为
循环,parfor
循环,看排除parfor-Loops中的变量故障.
提示
您可以配置parfor
循环使用抽搐
和toc
来测量速度与相应的比较为
循环。使用ticBytes
和tocBytes
度量并行池中的工作线程之间传输的数据量。有关更多信息和示例,请参见剖析parfor-loops.