为
ル,プからparfor
ル,プへの変換
場合によっては,为
ルプをparfor
ル,プに変換するためにコ,ドを修正しなければなりません。この例では,単純な入れ子にされた为
ル,プを使用してparfor
ル,プの問題点を診断し,修正する方法を説明します。次のコ,ドをmatlab®で実行し,その結果を調べます。
为X = 0:0.1:1为y = 2:10 A(y) = A(y-1) + y;结束结束
コ,ドを高速化するために,为
ルプをparfor
ル,プに変換してみます。次のコ,ドではエラ,が出ることを確認してください。
parforX = 0:0.1:1parfory = 2:10 A(y) = A(y-1) + y;结束结束
この場合,修正なしで为
ルプをparfor
ル,プに単純に変換することはできません。これを機能させるには,コ,ドの数箇所を変更しなければなりません。問題点を診断するために,matlabエディタでコドアナラザのメッセジを調べます。
次のコ,ドには,为
ルプをparfor
ル,プに変換するときの一般的な問題が示されています。
これらの問題を解決するには,parfor
を使用するようにコ,ドを修正しなければなりません。parfor
ループの本体は,複数のMATLABワーカーを非確定的な順序で使用して,並列プール内で実行されます。したがって,parfor
ル,プの本体に関する以下の要件を満たさなければなりません。
parfor
ル,プの本体は独立していなければなりません。あるループの反復が前の反復に依存していてはなりません。反復が非確定的な順序で並列実行されるためです。この例では、A(y) = A(y-1) + y;
parfor
を使用できません。独立性の問題を扱う次のステップにいては,Parforル,プ反復が独立していることの確認を参照してください。ある
parfor
ル,プを別のparfor
ル,プの内側に入れ子にすることはできません。この例には入れ子にされた2の为
ルプがあるため,1の为
ル,プのみをparfor
ル,プに置き換えることができます。代わりに,parfor
ル,プを使用する関数を,もう一方のparfor
ル,プ本体内で呼び出すことができます。ただし,すべてのワ,カ,は最も外側のル,プの並列化に使用されるため,こうして入れ子にされたparfor
ル,プに計算上の利点はありません。入れ子にされたルプの扱いにいてのヘルプは,入れ子にされたparforル,プおよびforル,プ,およびその他のparforの要件を参照してください。parfor
ル,プの変数は連続的に増加する整数でなければなりません。この例では,parforX = 0:0.1:1
parfor
を使用できません。ル,プ変数の値をアルゴリズムの求める整数値に変更して,この問題を解決することができます。parfor
ルプ変数のトラブルシュティングの次の手順にいては,Parforル,プの変数が連続的に増加する整数であることの確認を参照してください。为
ル,プとは異なり,parfor
ル,プを早期に終了することはできません。parfor
ルプの本体にreturnステトメントやbreakステトメントを含めないでください。通信がないため,ループを実行している他のMATLABインスタンスには停止するタイミングが認識されません。代替策として,parfeval
の使用を検討してください。为
ル,プからparfor
ル,プへの変換でまだ問題がある場合は,Parforル,プ内の変数のトラブルシュ,ティングを参照してください。
ヒント
抽搐
とtoc
を使用して,対応する为
ル,プと比較して速度の上昇を測定し,parfor
ルプをプロファリングすることができます。ticBytes
とtocBytes
を使用して,並列プ,ル内のワ,カ,が送受信するデ,タ量を測定します。詳細と例にいては,Parforル,プのプロファ,リングを参照してください。