Parfor замедляет вычисления
Я запустил этот код на компьютере с 44 работниками. Однако каждая параллельная итерация медленнее, чем в последовательном режиме, хотя общее время выполнения цикла в целом уменьшается.
template=cell(31,1);
for i=1:31
template{i}=rand(i+24);
end
parfor i=1:5
img=rand(800,1280+i); % It's an other function that gives me the values of img ,here it's just an example
tic
cellfun (@(t) normxcorr2 ( t ,img),template,'UniformOutput',0);
toc
end
В результате время в каждом цикле составляет приблизительно 18 с. Когда я меняю parfor
в for
прошедшее время составляет примерно 6,7 с в каждом цикле.
Можете ли вы объяснить мне, почему в этом случае цикл parfor медленнее, чем цикл for? Я проверил документацию MATLAB, а также похожие вопросы, но это мне не помогло.
Примечание: общее время выполнения скрипта быстрее parfor
версия, я просто хочу понять, почему функция cellfun
в 3 раза медленнее в параллельной версии.
1 ответ
Проверьте использование процессора.
Я считаю, что главная причина здесь в том, что такие вещи, как fft (который, скорее всего, является частью xcorr), будут использовать более одного ядра. Сейчас я не могу проверить parfor, но обычный цикл for уже использует около 70% ЦП на моем 4C/4T ЦП с вашим кодом. Таким образом, parfor может в лучшем случае заполнить оставшиеся 30% (на моем компьютере), но, очевидно, будет запускать каждый экземпляр медленнее.