Main Content

リダクション代入での parfor ループの使用

次の 2 つの例では、リダクション代入を使用した 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)

関連するトピック