Speed up: Parfor loop vs Vectorization

11 Ansichten (letzte 30 Tage)
max fire
max fire am 20 Aug. 2020
Kommentiert: max fire am 21 Aug. 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.

Akzeptierte Antwort

Mohammad Sami
Mohammad Sami am 21 Aug. 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 Kommentare
Raymond Norris
Raymond Norris am 21 Aug. 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 am 21 Aug. 2020
Oh, that's nice of you, Raymond, thanks.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

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!

Translated by