主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

使用 parfor 循环进行归约分配

这两个示例展示了使用缩减分配的 parfor 循环。减少是循环迭代过程中的累积。左边的示例使用 x 在循环的 10 次迭代中累积总和。右边的示例生成一个连接数组,1:10。在这两个示例中,工作单元上迭代的执行顺序并不重要:当工作单元程序为每次迭代计算单独的结果时,客户端会正确地累积并组合最终的循环结果。

x = 0;
parfor i = 1:10
    x = x + i;
end
x
x =

    55
x2 = [];
n = 10;
parfor i = 1:n
    x2 = [x2, i];
end
x2
x2 =

     1     2     3     4     5     6     7     8     9    10

如果循环迭代以不确定的序列进行,您可能会认为右侧示例中的连接序列是不连续的。但是,MATLAB® 可以识别连接操作并产生确定性的结果。

下一个尝试计算斐波那契数的示例不是有效的 parfor 循环,因为一次迭代中 f 元素的值取决于在其他迭代中计算的 f 其他元素的值。

f = zeros(1,50);
f(1) = 1;
f(2) = 2;
parfor n = 3:50
    f(n) = f(n-1) + f(n-2);
end

完成循环示例后,清除工作区并删除并行工作单元池:

clear
delete(gcp)

另请参阅

主题