11

並列計算ツールボックスをインストールしてコードで使用すると、MATLAB はループparforに到達すると自動的にプールを開始します。parforただし、これによりデバッグが困難になることがあります。そのため、特定の状況で MATLAB がプールを開かないようにしたいと考えています。では、MATLAB にプールを開かないようにするにはどうすればよいでしょうか? もちろん、コードを調べてすべてのループを削除parforし、通常のループに置き換えることもできforますが、これは面倒で、変更を元に戻すのを忘れる可能性があります。

編集:指定するには、理想的には、コントロールや変数などを設定するときに、parfor ループが for とまったく同じように動作することを望みます。つまり、たとえば、for ループにブレークポイントを配置することもできるはずです。

4

3 に答える 3

5

通常の構文と同様に

parfor i = 1:10

あなたも使うことができます

parfor (i = 1:10, N)

ここNで、ループで使用されるワーカーの最大数です。コードの他の部分によって設定される変数になる可能性があるため、変数を 1 または 0 にN設定することで並列処理を効果的にオンまたはオフにすることができます。N


編集:明確にするために、これはコードが実行されるワーカーの数のみを制御します(Nがゼロの場合、プールがまったく開始されるかどうか)。プールが存在しない場合、コードはクライアントで実行されます。それにもかかわらず、コードはループのままであり、parforループと同じセマンティクスを持っていませ。ループには存在しないループforのループ コードには制限があり、ループの反復が実行される順序は保証されません。 .parforfor

を使用するときはparfor、単に「速度を上げてください」と言っているだけではありません。あなたはMATLABに「このループの反復は独立しており、任意の順序で実行できることを保証できるので、並列化しようとしても大丈夫です」と言っています。あなたがそれを保証したので、MATLAB は、forループの場合とは異なるセマンティクスを使用して速度を上げることができます。

forループ動作を完全に取得する唯一の方法は、を使用forすることです。デバッグ目的で前後に切り替える必要がある場合は、/ をコメント化してコメントを解除する必要がありますfor(parforまたは、if/ブロックを使用して、いくつかに応じてaと a をelse切り替えます)。変数)。forparfor

于 2014-08-11T12:58:38.320 に答える