Can I avoid this broadcast variable?
9 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponse acceptée
Matt J
le 22 Fév 2019
Modifié(e) : Matt J
le 22 Fév 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 commentaires
Matt J
le 22 Fév 2019
Modifié(e) : Matt J
le 22 Fév 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)
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Parallel Computing Fundamentals dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!