Can I avoid this broadcast variable?
5 views (last 30 days)
Show older comments
Hello,
I had two nested for loops that I would like to parallelise. It looked like this
for k = 1:size(S,2)
for j = 1:length(b)
fun(S(:,k),b(j));
end
end
Here S is large (10^5 x 10^2), and b is not large (1 x 10).
Since all of the loops are independent I found the following solution
parfor i = 1:size(S,2)*length(b)
k = ceil(i/length(b)); %S
j = i-(k-1)*length(b); %b
fun(S(:,k),b(j));
end
The problem is that S and b are broadcast variables.
Is there a way to eliminate S as a broadcast variable (b does not matter much)?
Thank you!
0 Comments
Accepted Answer
Matt J
on 22 Feb 2019
Edited: Matt J
on 22 Feb 2019
Why not this?
parfor k = 1:size(S,2)
tmp=S(:,k);
for j = 1:length(b)
fun(tmp,b(j));
end
end
2 Comments
Matt J
on 22 Feb 2019
Edited: Matt J
on 22 Feb 2019
You would need a parpool with N>100=size(S,2) labs in order for the work per lab to be any less in your strategy than what I propose.
Method 1: parallelize over k only. The busiest lab will perform ceil(size(S,2)/N)*length(b) serial calls to fun.
Method 2: parallelize all calls to fun. The busiest lab will perform ceil(size(S,2)*length(b)/N) serial calls.
Both are therefore nearly the same unless N>size(S,2)
More Answers (0)
See Also
Categories
Find more on Parallel Computing Fundamentals in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!