my code is slower with a parfor loop
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
emar
el 21 de Abr. de 2017
Comentada: Walter Roberson
el 21 de Abr. de 2017
Hello,
I ran this code in a computer with 44 workers. However, it's slower than the for version.
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
As a result, elapsed time in each loop is approximately 18 s . When i change the parfor to for , the time elapsed is approximately 6.7 s in each loop .
Can you explain me why the parfor loop is slower than the for loop?
I checked Matlab documentation and also similar questions on Matlab answers, but it didn't help me.
Note : the total time of execution of the script is faster for the parfor version, i just want to understand why the function cellfun is 3 times slower in parallel version.
Thanks in advance
0 comentarios
Respuesta aceptada
Walter Roberson
el 21 de Abr. de 2017
normxcorr2 for large enough matrices probably ends up invoking the high performance libraries such as LINPACK or BLAS. Those high performance libraries are threaded and will use all available threads, even if you do not have the Parallel Computing Toolbox. When you use parfor then unless you are using R2017a or later and have specifically set the number of threads, then your parfor worker will only have a single thread available to it. That leads to the worker taking longer for that task.
3 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!