【发布时间】:2012-12-07 19:09:27
【问题描述】:
我不确定并行 for 循环的迭代独立意味着什么。以下是两个有效的并行 for 循环的示例吗?它们写入和读取相同的矩阵,但矩阵索引对于每次迭代都是唯一的。
X = zeros(64);
parfor i = 1:64^2
X(i) = i;
end
parfor i = 1:64
X(i,:) = X(i,:) .* randn(1,64);
end
【问题讨论】:
-
如果不是有效的并行循环,Matlab 会输出错误。因此,您只需在 matlab 中运行它,您就会立即得到答案。
-
文档中的这句话似乎表明 Matlab 并不总是警告:“注意由于迭代顺序的独立性,parfor 的执行不能保证确定性结果。”
-
这只是意味着可以以任何顺序进行迭代。这对您的案件没有影响。
-
这就是我想知道的! “有效的并行循环”是指“按预期运行”。
-
实际上我认为它确实对这种特殊情况有影响 -
randn取决于全局rng状态,因此其结果将取决于循环通过的位置和运行顺序。 (我不知道rng状态是从父级传递给工人,还是它们都从默认种子开始;无论哪种方式,都有交互。)听起来像是他们警告的那种不确定的结果。parfor正确性检查可能看不到这一点,因为它影响的是隐藏的全局状态,而不是工作区中的切片变量或对象。
标签: matlab parallel-processing