my code is slower with a parfor loop
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
emar
am 21 Apr. 2017
Kommentiert: Walter Roberson
am 21 Apr. 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 Kommentare
Akzeptierte Antwort
Walter Roberson
am 21 Apr. 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 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!