主要内容

转换循环进入parfor循环

在某些情况下,必须修改代码才能进行转换循环,parfor循环。这个例子展示了如何诊断和修复parfor循环问题使用简单的嵌套循环。在MATLAB中运行此代码®并检查结果。

X = 0:0.1:1y = 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循环:

  1. 的主体parfor-loop必须是独立的。一个循环迭代不能依赖于前一个迭代,因为迭代是以不确定的顺序并行执行的。在这个例子中,

    A(y) = A(y-1) + y;
    不是独立的,所以你不能用parfor.有关处理独立性问题的下一步步骤,请参见确保parfor-Loop迭代是独立的

  2. 不能嵌套parfor-循环在另一个parfor循环。这个例子有两个嵌套-loops,因此只能替换一个带a的-循环parfor循环。相反,您可以调用一个使用parfor-loop在另一个的体内parfor循环。然而,这样的嵌套parfor-loops不会给你带来计算上的好处,因为所有的worker都被用来并行化最外层的循环。有关处理嵌套循环的帮助,请参见嵌套的parfor和for-Loops和其他parfor需求

  3. parfor-loop变量必须是连续递增的整数。在这个例子中,

    parforX = 0:0.1:1
    有非整数循环变量,因此不能使用parfor在这里。您可以通过将循环变量的值更改为算法所需的整数值来解决此问题。用于故障排除的后续步骤parfor-loop变量,参见确保parfor-Loop变量是连续递增的整数

  4. 你无法摆脱parfor-尽早循环,就像你可以在循环。的正文中不包含return或break语句parfor循环。如果没有通信,运行循环的其他MATLAB实例不知道何时停止。作为替代方案,请考虑parfeval

    如果你仍然有问题转换循环,parfor循环,看排除parfor-Loops中的变量故障

提示

您可以配置parfor循环使用抽搐toc来测量速度与相应的比较循环。使用ticBytestocBytes度量并行池中的工作线程之间传输的数据量。有关更多信息和示例,请参见剖析parfor-loops

另请参阅

||

相关的话题