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