7

Ubuntu 64 ビット用の Matlab R2012b があります。Intel Core i3 CPU M 330 @ 2.13GHz × 4 を持っています。

parforを使用して 4 つのループを同時に並列化したい。Intel Core i3 には 2 つのコアと 4 つのスレッドがあるため、次のコードを使用します。

if matlabpool('size') == 0 % checking to see if my pool is already open
    matlabpool(4)
else
    matlabpool close
    matlabpool(4)
end

そして、次のエラーが表示されます。

エラー:

最小で 4 つのワーカーを要求しましたが、クラスター "ローカル" には、最大 2 つのワーカーを許可するように NumWorkers プロパティが設定されています。これより多くのワーカー (ローカル クラスターの場合は最大 12) で通信ジョブを実行するには、クラスターの NumWorkers プロパティの値を増やします。ローカル クラスターの NumWorkers の既定値は、ローカル マシンのコア数です。

なんで?私のマシンの NumWorkers のデフォルト値は 2 ですが、同時に 4 つのループを実行できる場合、どうすれば取得できますか?

4

2 に答える 2

9

デフォルト値を増やすにはNumWorkers、クラスター プロファイル マネージャーを開きます ([並列] -> [クラスター プロファイルの管理])。プロファイルを選択しlocal、[編集] をクリックNumWorkersして、可能な最大値 (この場合は 4) まで増やします。matlabpoolマシン上の物理コアよりも多くのワーカーを使用して を作成できるようになりました。

ただし、コアよりも多くのワーカーを使用すると、コアと同じ数のワーカーを使用する場合と比較して、パフォーマンスが低下する可能性があることに注意してください。

于 2013-02-20T16:21:05.197 に答える
9

クラスター プロファイルの値をプログラムでNumWorkers2 から 4 に変更するには、次を使用localできます。

myCluster = parcluster('local');
myCluster.NumWorkers = 4;  % 'Modified' property now TRUE
saveProfile(myCluster);    % 'local' profile now updated,
                           % 'Modified' property now FALSE    
于 2014-06-12T23:21:13.163 に答える