2012-04-12 14 views
7

MATLABのparforについて簡単な質問があります。自分のプログラムで、parforとregular forループを切り替えるフラグを設定したいと思います。基本的には、私のコードのいくつかの部分が "デバッグ"モードでグラフィックスを更新できるようにするために、この機能が必要です。Matlab PARFORループをプログラムでオン/オフすることはできますか?

だから、私はこの機能を持っているシンプルなものを探しています:

if (flag) 
    for i = 1:n 
else 
    parfor i = 1:n 
end 

    % Do loop tasks. 

    end 

任意の助けいただければ幸いです!ありがとう!

+0

はあなたの問題を解決する1のプールサイズを確保していますか? – Mikhail

+0

正確には、parforはプロットなどの任意のグラフィカルオブジェクトの作成を制限するためではありません。したがって、私はこの出力が必要なときはいつも、関数のコードを手動で編集する必要があります。 –

答えて

5

いいえ、これはできません。あなたがparforかのどちらかを持っているように、しかし、あなたは別の関数でループ本体を包むことができれば、あなたはparforforループのどちらかが身体を呼び出すことができ、またすなわち

if (flag) 
    parfor i=1:n 
     out(i) = loopBody(i) 
    end 
else 
    for i=1:n 
     out(i) = loopBody(i) 
    end 
end 

、あなたはコードを編集することができますあなたのループの前にforがあります。これは私がしばしばやることです。

+2

もし4月1日だったら、「私はMATLABに '#define'があったらいいのに!#define LOOP parfor'や' #define LOOP''を書くことができました。 –

+2

@ Li-aungYip:はい、これは確かに便利です。 'parfor'はデバッグに失敗します。私は、R2015aの周りには問題は解決されると予想しています。 – Jonas

4

matlabpool closeでプールを閉じると、parforは、forのように動作し、すべてのグラフィックス処理が可能です。だから、デバッグ中にプールを閉じるだけです。

+0

'parfor'は' for'のように振る舞いません。ループ反復の順序は保証されておらず、任意の順序で実行できます。典型的には、通常の順序でそれらに頼っていないことを保証するために、実際には*逆順で実行されます。 –

+1

これはもはや事実ではないことに注意してください。最近のバージョンのMATLAB&PCT *は自動的にプールを開くことができるので、私の答えに応じてオプションのworker引数を 'parfor'に使う必要があります。 – Edric

5

つ以上のオプション - PARFOR

にオプションの引数を使用
if flag 
    arg = Inf; 
else 
    arg = 0; 
end 
parfor (idx = 1:n, arg) 
    ... 
end 
関連する問題