2013-02-20 9 views
6

私はMatlab R2012bをUbuntu 64ビット用に用意しています。私はIntel Core i3 CPU M 330 @ 2.13GHz×4を持っています。MatlabのCore i3とPARFORで4つの作品を並列化する方法

parfor私は同時に4つのループを並列化したいと思っています。インテル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 

をそして私は次のエラーを取得:

エラー:

You requested a minimum of 4 workers, but the cluster "local" has the NumWorkers property set to allow a maximum of 2 workers. To run a communicating job on more workers than this (up to a maximum of 12 for the Local cluster), increase the value of the NumWorkers property for the cluster. The default value of NumWorkers for a Local cluster is the number of cores on the local machine.

なぜ?私のマシンのNumWorkersのデフォルト値は2ですが、私は同時に4つのループを行うことができますが、どのようにすればいいですか?

答えて

8

デフォルトのNumWorkersを増やすには、Cluster Profile Manager(Parallel-> Manage Cluster Profiles)を開きます。 localのプロファイルを選択し、[編集]をクリックしてNumWorkersを可能な限り最大値(ケース4)に増やします。これで、マシン上の物理コアより多くの労働者でmatlabpoolを作成することができます。

ただし、コアよりも多くのワーカーを使用すると、コアと同じ数のワーカーを使用する場合に比べてパフォーマンスが低下する可能性があります。プログラムでlocalクラスタプロファイルの2から4にNumWorkersの値を変更するには

+0

はい、これは確かに正しいです。 +1 – Jonas

+0

2つの質問:なぜコアよりも労働者の方がパフォーマンスが低下しましたか?ローカルクラスタのNumWorkersのデフォルト値をどのように知ることができますか? –

+2

デフォルト値は物理コアの数です(これは質問で引用したエラーメッセージに記載されています)。コアよりも多くの労働者は、物理的に別々のコア上で動作しない、つまり相互に影響する可能性があるため、パフォーマンスを低下させる可能性があります。 –

8

、あなたがすることができuse

myCluster = parcluster('local'); 
myCluster.NumWorkers = 4; % 'Modified' property now TRUE 
saveProfile(myCluster); % 'local' profile now updated, 
          % 'Modified' property now FALSE  
関連する問題