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% (на моем компьютере), но, очевидно, будет запускать каждый экземпляр медленнее.

Другие вопросы по тегам