主要内容

ル,プからparforル,プへの変換

場合によっては,ルプをparforル,プに変換するためにコ,ドを修正しなければなりません。この例では,単純な入れ子にされたル,プを使用してparforル,プの問題点を診断し,修正する方法を説明します。次のコ,ドをmatlab®で実行し,その結果を調べます。

X = 0:0.1:1y = 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ル,プの本体に関する以下の要件を満たさなければなりません。

  1. parforル,プの本体は独立していなければなりません。あるループの反復が前の反復に依存していてはなりません。反復が非確定的な順序で並列実行されるためです。この例では、

    A(y) = A(y-1) + y;
    は独立していないためparforを使用できません。独立性の問題を扱う次のステップにいては,Parforル,プ反復が独立していることの確認を参照してください。

  2. あるparforル,プを別のparforル,プの内側に入れ子にすることはできません。この例には入れ子にされた2のルプがあるため,1のル,プのみをparforル,プに置き換えることができます。代わりに,parforル,プを使用する関数を,もう一方のparforル,プ本体内で呼び出すことができます。ただし,すべてのワ,カ,は最も外側のル,プの並列化に使用されるため,こうして入れ子にされたparforル,プに計算上の利点はありません。入れ子にされたルプの扱いにいてのヘルプは,入れ子にされたparforル,プおよびforル,プ,およびその他のparforの要件を参照してください。

  3. parforル,プの変数は連続的に増加する整数でなければなりません。この例では,

    parforX = 0:0.1:1
    のル,プ変数は非整数であるため,ここではparforを使用できません。ル,プ変数の値をアルゴリズムの求める整数値に変更して,この問題を解決することができます。parforルプ変数のトラブルシュティングの次の手順にいては,Parforル,プの変数が連続的に増加する整数であることの確認を参照してください。

  4. ル,プとは異なり,parforル,プを早期に終了することはできません。parforルプの本体にreturnステトメントやbreakステトメントを含めないでください。通信がないため,ループを実行している他のMATLABインスタンスには停止するタイミングが認識されません。代替策として,parfevalの使用を検討してください。

    ル,プからparforル,プへの変換でまだ問題がある場合は,Parforル,プ内の変数のトラブルシュ,ティングを参照してください。

ヒント

抽搐tocを使用して,対応するル,プと比較して速度の上昇を測定し,parforルプをプロファリングすることができます。ticBytestocBytesを使用して,並列プ,ル内のワ,カ,が送受信するデ,タ量を測定します。詳細と例にいては,Parforル,プのプロファ,リングを参照してください。

参考

||

関連するトピック