Effacer les filtres
Effacer les filtres

Sharing data and computations across processors

1 vue (au cours des 30 derniers jours)
Muna Tageldin
Muna Tageldin le 2 Oct 2020
so I have this code which I am trying to run over a cluster. I used spmd and distributed for (drange). It worked fine on local cluster but depolying it to remote cluster requires some work and I need to share the function test between workers so I used
addArrachedFiles('<path to the function>/test.m');
Basically the function test has two input variables a and b (this is a simplifeid code used for testing but actually the code is complex). I got an error "undefined variables a and b. I have seen some people use parfeval to evaluate functions. Can I use parfeval with distributed spmd and for-drange ? if not, what is the best way to code this program.
function [t,n]=test(a,b)
x=zeros(size(b));
% for i=1:size(a,2)
% c=a(i)*exp(-b);
% x(i)=sum(c);
%
% end
t=sum(log(a*b));
n=mean(a*b);
a=rand(1,100);
b=rand(3,4e3);
y=zeros(3,100);
x=zeros(3,100);
% y=[1 2;3 4;5 6];
% x=[7 8;9 10;11 12];
spmd
C1 = codistributed(x,codistributor1d(2));
C2 = codistributed(y,codistributor1d(2));
C3 = codistributed(a,codistributor1d(2));
getLocalPart(C1)
getLocalPart(C2)
%getLocalPart(C3)
for i=drange(1:100)
[C2(1,i),C1(1,i)]=test(C3(i),b(1,:)) ;
y(1,i)=u1;x(1,i)=c1;
[C2(2,i),C1(2,i)]=test(C3(i),b(2,:)) ;
[C2(3,i),C1(3,i)]=test(C3(i),b(3,:)) ;
y(2,i)=u2;x(2,i)=c2;
y(3,i)=u3;x(3,i)=c3;
end
end
r1=gather(C1)
r2=gather(C2)

Réponses (0)

Catégories

En savoir plus sur Parallel Computing 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