2016-07-29 4 views
-2

Я написал код от matlab, и я использовал инструмент для параллельных вычислений Подробное описание моего кода: Я пытаюсь реализовать параллельный генетический алгоритм с помощью matlab и parallel вычислительной панели.Параллельный код по 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

У моего ПК есть процессор с двумя ядрами – 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 ненужная и не дает никаких преимуществ, но всегда зависит от выполняемой вами функции.

+0

Спасибо за ваш ответ. можете ли вы дать мне ссылку на использование инструмента «Run and Time». есть ли этот инструмент в MATLAB R2012a? – monir

+0

http://mathworks.com/help/matlab/matlab_prog/profiling-for-improving-performance.html - вот руководство по использованию инструмента профилирования (или Run and Time). – Valentin

0

Вы упомянули, что ваш процессор имеет два ядра. Одной из проблем может быть сам код, он выглядит так, как будто вы вызываете скрипты вместо функций, поэтому вы можете излишне использовать свое рабочее пространство, делая это. Кроме того, если какой-либо из этих сценариев объявляет переменные «на лету», возможно, вы засоряете свою оперативную память (особенно хорошо подходит Matlab), что делает ваш код медленнее.

Попробуйте сначала оптимизировать каждый из сценариев.

Я бы порекомендовал вам использовать функции вместо скриптов.

Смежные вопросы