2013-02-20 4 views
6

Ich habe Matlab R2012b für Ubuntu 64 Bits. Ich habe eine Intel Core i3 CPU M 330 @ 2.13GHz × 4.Wie parallel 4 funktioniert mit PARFOR mit einem Core i3 in Matlab

Ich möchte Parfor parallel 4 Schleifen gleichzeitig zu verwenden. Da Intel Core i3 hat zwei Cores und 4 Threads Ich benutze diesen Code:

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

Und ich erhalten die folgende Fehlermeldung:

Fehler:

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.

Warum? Der Standardwert von NumWorkers in meiner Maschine ist 2, aber wenn ich 4 Schleifen gleichzeitig machen kann, wie bekomme ich es?

Antwort

8

Um den Standardwert NumWorkers zu erhöhen, öffnen Sie den Cluster-Profil-Manager (Parallel-> Cluster-Profile verwalten). Wählen Sie das Profil local, klicken Sie auf Bearbeiten, und erhöhen Sie NumWorkers auf den maximal möglichen Wert (in Ihrem Fall 4). Jetzt ist es möglich, eine matlabpool mit mehr Arbeitern als physische Kerne auf Ihrem Computer zu erstellen.

Beachten Sie jedoch, dass die Verwendung von mehr Arbeitern als Kernen zu einer verringerten Leistung im Vergleich zur Anzahl der Worker als Kerne führen kann.

+0

Ja, dies in der Tat richtig ist. +1 – Jonas

+0

Zwei Fragen: warum mehr Arbeiter als Kerne Leistung verringert? Wie kann ich den Standardwert von NumWorkers für einen lokalen Cluster kennen? –

+2

Der Standardwert ist die Anzahl der physischen Kerne (dies wird sogar in der Fehlermeldung angegeben, die Sie in Ihrer Frage angegeben haben). Mehr Arbeiter als Kerne * können Ihre Leistung verringern, da sie nicht auf physisch getrennten Kernen laufen, d. H. Sie können sich gegenseitig beeinflussen. –

8

programmatisch Um den Wert von NumWorkers von 2 bis 4 des local Cluster-Profil zu ändern, können Sie use:

myCluster = parcluster('local'); 
myCluster.NumWorkers = 4; % 'Modified' property now TRUE 
saveProfile(myCluster); % 'local' profile now updated, 
          % 'Modified' property now FALSE  
Verwandte Themen