Speed up: Parfor loop vs Vectorization

11 vues (au cours des 30 derniers jours)
max fire
max fire le 20 Août 2020
Commenté : max fire le 21 Août 2020
I'm trying to speed up my code, which is bottlenecking here:
tic
FD = zeros(28, Rotations);
parfor i = 1:Rotations
CodePR = rotate (CodeP, i*(Rotations - 1)*angle, [0 0]);
for j = 1:28
FD(j, i) = (area(intersect(intersect(CodePR, MaskP), WholeVD(j))))/(AreaFD(j));
end
end
A = FD;
toc
I came up with that solution:
tic
FD = zeros(28, Rotations);
WholeVD = transpose(WholeVD);
AreaFD = transpose(AreaFD);
parfor i = 1:Rotations
CodePR = rotate (CodeP, i*(Rotations - 1)*angle, [0 0]);
FD(:,i) = area(intersect(intersect(CodePR, MaskP), WholeVD))./AreaFD;
end
B = FD;
toc
which is like 20 times (for my rig at least). The bad thing is that with actual dataset it consumes too much RAM (and eventually crashes matlab) so I can't evaluate that. Getting rid or PARFOR helps with memory problem but effectivly slower (by amount of CPU cores). Is there any walk arounds to reduce memory usage so I could utilize more threads?
The whole code is in attachment (fold everything, described part is not foldable). Thanks.

Réponse acceptée

Mohammad Sami
Mohammad Sami le 21 Août 2020
R2020a introduced Threads based parallel pool. This may reduce the memory issues.
You can create a threads based parpool before using parfor.
pool = parpool("threads");
  3 commentaires
Raymond Norris
Raymond Norris le 21 Août 2020
Running your code (which I'm asusming isn't the entire number of iteration) ran under "threads", so I think that's a good approach to potentially solving your parfor memory issues. Both "local" and "threads" ran in the same amount of time.
max fire
max fire le 21 Août 2020
Oh, that's nice of you, Raymond, thanks.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by