Speed up: Parfor loop vs Vectorization
11 次查看(过去 30 天)
显示 更早的评论
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.
0 个评论
采纳的回答
Mohammad Sami
2020-8-21
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 个评论
Raymond Norris
2020-8-21
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.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!