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