我在Matlab中有一個1乘P的數組R(p大)。我將它的所有條目初始化爲0,並且數組R的第i個元素將接收來自myfunction
的輸出,應用於parameters(i)
。換句話說:在Matlab中用spmd填充數組
R=zeros(p,1);
for i=1:p
R(i)=myfunction(parameters(i));
end
相同的功能myfunction
多次應用不同的輸入。由於p可能變大,我認識到一個spmd
問題(單個程序,多個數據),並認爲使用spmd
構造可以幫助以前的代碼更快地運行。
如果我運行matlabpool
,我獲得了n_workers不同的實驗室。我的想法是將數組R分解成n_workers不同的部分,並要求每個可用的工作人員填充數組的一部分。我願做這樣的事情:
q=((p-1)-mod(p-1,n_workers-1))/(n_workers-1);
lab 1:
for j=1:q
R(j) = myfunction(parameters(j));
end
lab 2:
for j=(q+1):(2*q+1)
R(j) = myfunction(parameters(j));
end
...
lab n_workers:
for j=(q*(n_workers-1)+1):p
R(j) = myfunction(parameters(j));
end
然而,由於我是新來的並行編程,我不知道如何寫這個正確的在Matlab。我可以使用coditributed
數組來代替將陣列R細分爲自己的數組嗎?