2016-07-29 20 views
-2

Ich habe einen Code von Matlab geschrieben und i Parallel Computing Toolbox mehr Beschreibung von meinem Code verwendet haben: ich versuche parallel genetischen Algorithmus von Matlab und parallel zu implementieren Computer-Toolbox.parallel Code von parfor ist langsamer als serielle Version von für

Ich habe das implementiert, aber ich habe ein Problem. das ist mein paralleler code mit parfor ist so viel langsamer als seriell mit für.

mein Code:

tic 

for j=1:maxIteration 
    parfor i=1:numIslands 
     if migrationInterval 
      doMigration; 
     end 
     doCrossover; 
     doMutation; 
     newSpring; 
    end 
end 
toc 

numIslands ist immer kleine Zahl (5 bis 12) maxiteration immer große Zahl ist (1500 bis 5000) mir bitte helfen danke

+0

mein PC hat eine CPU mit zwei Kernen – monir

+1

Was bekommen Sie, wenn Sie ['gcp'] (http://www.mathworks.com/help/distcomp/gcp.html) ausführen '(' nocreate '). NumWorkers'? Ändern sich Ihre Timing-Ergebnisse, wenn Sie ['parpool'] (http://www.mathworks.com/help/distcomp/parpool.html)' (2); 'vor Ihrer Schleife hinzufügen? –

+1

Können Sie bitte die Details zur Einrichtung Ihres Pools angeben? Auch was ist 'MigrationInterval'? Was bestimmt, ob es wahr oder falsch ist? – Matt

Antwort

0

empfehle ich Ihnen zu Führen Sie Ihre Funktion mit dem Tool "Run and Time" aus. Die Ergebnisse werden angezeigt, wenn der Grund in Parfor-Prozedur oder in Ihrer Funktion ist. Es kann das Parfor Verfahren ist unnötig und gibt keinen Vorteil, aber es hängt immer von der Funktion, die Sie ausführen.

+0

danke für deine antwort. Können Sie mir eine Referenz für die Verwendung des "Run and Time" Tools geben? Gibt es dieses Werkzeug in MATLAB R2012a? – monir

+0

http://mathworks.com/help/matlab/matlab_prog/profiling-for-improving-performance.html - Hier finden Sie eine Anleitung zur Verwendung des Tools Profiler (oder Run and Time). – Valentin

0

Sie erwähnen, dass Ihre CPU zwei Kerne hat. Ein Problem könnte der Code selbst sein, es sieht so aus, als würden Sie Skripte anstelle von Funktionen aufrufen, so dass Sie Ihren Arbeitsbereich unnötig überfluten könnten. Wenn eines dieser Skripts Variablen im laufenden Betrieb deklariert, können Sie außerdem Ihren Arbeitsspeicher (Matlab ist besonders gut) blockieren, wodurch Ihr Code langsamer läuft.

Versuchen Sie zunächst, jedes der Skripte zu optimieren.

Ich würde Ihnen wirklich empfehlen, Funktionen anstelle von Skripten zu verwenden.