я сравниваю время выполнения между двумя блоками, один с использованием parfor
другой делает то же самое, выдавая parfeval
и выборки выхода:parfeval медленнее, чем parfor
parfor k = 1:N
a = rand(5000);
b = inv(a);
end
vs.
for k = 1:N
a = rand(5000);
F(k) = parfeval(p,'inv',1,a);
end
for k = 1:N
[completedIdx,value] = fetchNext(F);
fprintf(1,'%d ',completedIdx);
end
parfor
последовательно быстрее. Есть ли какие-либо сведения о том, почему это так? Мое упрощенное понимание - parfor
, по существу, запускает каждый цикл как параллельное задание.
Соответствующее чтение: http://stackoverflow.com/questions/32146555/saving-time-and-memory-using-parfor-in-matlab/32146700#32146700 Операция 'inv' действительно неявно многопоточна, поэтому использование' parfor', что не ускоряет его (см. сообщение, которое я связал). – Adriaan
Отличный смысл. Я смотрел, но не нашел inv среди многопоточных функций, но я вам доверяю. Тем не менее, я не уверен, объясняет ли это более медленный parfeval по сравнению с parfor. –