У меня есть простой цикл parfor
, приведенный ниже.
% fileAddr is a cell array of (size N) of file-addresses
sIdx = nan(N,1);
eIdx = nan(N,1);
errMsg = cell(N,1);
parfor i=1:N
[sIdx(i),eIdx(i),errMsg{i}] = myFunk(fileAddr{i});
end
Функциональный файл myFun()
загружает файл, заданный fileAddr{i}
, выполняет некоторые вычисления и возвращает результаты. Часть загрузки файла занимает больше всего времени. Моя машина имеет 4 физических ядра. Я пробовал parfor()
с пулом из 1,2,3 и 4 рабочих. Каждый раз затраты времени примерно одинаковы. Я так понимаю, что если несколько рабочих load()
обрабатывают файлы параллельно, программа будет работать быстрее, но результаты профилировщика показывают обратное.
Может кто-нибудь объяснить, где я делаю ошибку?
parfor()
НЕ волшебная палочка, не обращайтесь с ней как таковой. Если загрузка файлов действительно является узким местом этой операции, никакое распараллеливание не поможет вам ускорить код. Жесткие диски и твердотельные накопители имеют конечную скорость чтения, и если вы максимизируете ее, вы не сможете ускориться. Распараллеливание потенциально может помочь вам только тогда, когда узким местом являются вычисления. - person Adriaan   schedule 26.07.2018