2016-03-27 9 views
0

私はparforレベルで最大の労働者数を指定できるかどうか知りたいですか?Matlab並列処理:parforレベルで使用する作業者の数を制限できますか?

私はmatlabの並列プール内のワーカーの数を変更する方法を知っていますが、私はparforループに割り当てられたワーカーをすばやくダイナミックに変更したいと考えています。

合理:私はいくつかの長いループのparfor、時には仕事の奇数、と言う5は、最後の1が始まる前に終了する4つの他の人を待っているものを残して実行している、これは比較すると非常に遅いです5つすべてを並行して実行するだけです。私が望むのは、5つのジョブがあるかどうかを判断し、5つをすべて並列に実行できるコードですが、6つある場合は2つの3つのジョブを実行する方が良い設定なので、このケースでは3人、前者では6人です。

これを達成するために並列プールをシャットダウンして再起動するのは、むしろ遅くて面倒です。たとえば、10人の作業者で起動するだけで、実行時に使用するのが最も効率的なものがいくつあるかを動的に判断する方法があれば、問題は解決します。

+1

この構文は次のとおりです: 'parfor(loopvar = initval:endval、M);ステートメント。文章に従って: "最大M人のワーカーまたはスレッドを使用してループ内の文を実行します。ここでMは負ではない整数です" – Amro

+0

@Amroああ、私は完全にそれを逃した、ありがとう!それを回答として投稿できますか?それは私が探していたものです。 –

答えて

2

the documentationによれば、parforための2番目の構文がある:

parfor (loopvar = initval:endval, M) 
    statements 
end 

これはM労働者の最大値を使用して、ループ内のステートメントを実行する:

はの最大数を指定するMを使用parfor -loopの本文の文を評価するMATLABの作業者。 Mは、負ではない整数でなければなりません。デフォルトでは、MATLABは利用可能な数のワーカーを使用します。上限を指定した場合、MATLABは追加のワーカーが使用可能であっても、その数を超えて使用しません。使用可能なリソースよりも多くのリソースを要求すると、MATLABは呼び出し時に使用可能な最大数を使用します。

関連する問題