2016-07-29 81 views
-2

我寫了一個代碼由matlab和我已經使用並行計算工具箱 更多關於我的代碼的描述: 我試圖通過matlab和並行實現並行遺傳算法計算工具箱。由parfor並行代碼比串行版本慢

我已經實現了,但我有一個問題。那是我用parfor編寫的並行代碼比使用for編寫的代碼慢得多。

我的代碼:

tic 

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

numIslands總是少數(5〜12) maxiteration始終是很大的數字(1500〜5000) 請幫我 謝謝

+0

我的電腦有兩個內核的CPU – monir

+1

當你運行['gcp'](http://www.mathworks.com/help/distcomp/gcp.html)'('nocreate')時你會得到什麼。 NumWorkers'?如果您在循環之前添加['parpool'](http://www.mathworks.com/help/distcomp/parpool.html)'(2);',您的計時結果會發生變化嗎? –

+1

你能否包括你的泳池設置細節?另外什麼是'migrationInterval'?什麼決定它是真是假? – Matt

回答

0

我建議你使用「運行和時間」工具運行你的功能。結果將顯示,如果原因在parfor程序或在您的功能。 它可以是parfor過程是不必要的,並沒有優勢,但它總是取決於你運行的功能。

+0

感謝您的回答。你能給我一個使用「運行和時間」工具的參考嗎? MATLAB R2012a中有這個工具嗎? – monir

+0

http://mathworks.com/help/matlab/matlab_prog/profiling-for-improving-performance.html - 這是一個如何使用探查器(或運行時間)工具的指南。 – Valentin

0

你提到你的CPU有兩個內核。一個問題可能是代碼本身,它看起來好像是在調用腳本而不是函數,所以您可能會因此而不必要地淹沒您的工作空間。而且,如果這些腳本中的任何一個都是動態聲明變量,那麼可能會堵塞RAM(Matlab尤其擅長),從而使代碼運行速度變慢。

嘗試先優化每個腳本。

我真的會推薦你使用函數來代替腳本。