リダクション代入での 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)