主要内容

确保这件事议案-loop迭代是独立的

如果您在转换时出错为了- 换来议案- 砍掉,确保你的议案-loop迭代是独立的。议案-loop迭代有没有保证订单,迭代顺序为了-loops是顺序。还议案-loop迭代在不同的matlab上执行®并行池中的工人,因此在迭代之间没有共享信息。因此议案-loop迭代不得依赖于先前迭代的结果。此规则的唯一例外是使用循环中的值累积减少变量

以下示例使用a生成等效结果为了- 左边和一个议案- 右边。尝试Matlab命令窗口中的示例:

清除一种为了i = 1:8 a(i)= i;结尾一种
a = 1 2 3 4 5 6 7 8
清除一种议案i = 1:8 a(i)= i;结尾一种
a = 1 2 3 4 5 6 7 8

每个元素一种等于其指数。这议案-Loop工作原因是每个元素由索引的循环变量确定,不依赖于其他变量。为了- 带独立任务的乐趣是理想的候选人议案- 砍伐。

笔记

默认情况下,议案如果您已经尚未启动,则自动启动并行工人池。议案使用默认群集配置文件创建池,如果您相应地设置了并行首选项。

在该示例中,数组元素在客户端工作区中可用议案- 完全一样,与a完全一样为了-环形。

现在在循环中使用非indexed变量,或者索引不依赖于循环变量的变量一世。尝试这些示例,并注意值D.一世之后:

清除一种d = 0;我= 0;为了i = 1:4 d = i * 2;a(i)= d;结尾一个d i.
a = 2 4 6 8 d = 8 i = 4
清除一种d = 0;我= 0;议案i = 1:4 d = i * 2;a(i)= d;结尾一个d i.
a = 2 4 6 8 d = 0 i = 0

虽然的元素一种在两个例子中是相同的,值D.不是。在里面为了-loop,迭代顺序执行,所以之后D.它的循环上次迭代中是否具有它的值。在里面议案但是,迭代并行执行迭代,因此不可能分配D.循环末尾的定义值。这种情况也适用于循环变量一世。所以,议案- 为其定义的行为,以便它不会影响值D.一世在循环之外。它们的值在循环之前和之后保持不变。如果你的变量议案-loop不是独立的,那么你可能会得到不同的答案为了-环形。总结,一个议案-Loop要求每次迭代都与其他迭代无关。所有跟随的代码议案语句不应依赖于循环迭代序列。

代码分析仪可以帮助诊断循环迭代是否已依赖。该示例中的代码显示了在前一个迭代中定义的迭代:

议案k = 2:10 x(k)= x(k-1)+ k;结尾
在MATLAB编辑器中查找代码分析仪。在这种情况下,代码分析器报告依赖关系。

然而,在其他情况下,代码分析器无法标记依赖关系。

有关其他常见的帮助议案问题,见嵌套Parcon和循环和其他Paret要求

也可以看看

相关例子

更多关于