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