使用 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)