2012-07-23 71 views
0

我正在嘗試兩個我的for-loops並在遠程集羣上運行它。Parfor循環不工作,如何解決?

我正在使用matlabpool打開本地12在開始與matlabpool關閉在最後。我遇到的問題是我的parfor-loop無法正確使用我的矩陣,我不知道如何重寫它以使其正常工作。

H = hadamard(n); 
H = [H;-H]; 
P = setdiff(P,H,'rows'); 
[r,c] = size(P); 
A = zeros(n,r); 
    parfor i=1:r 
     for j=1:n 
      d = P(i,:) + H(j,:); 
      A(j,i) = sum(d(:) ~= 0); 
     end 
    end 

和:

u2Had = cell(2,r); 
parfor i =1:r 
    u2Had{1,i} = min(A(:,i)); 
    MinHadIndex = find(A(:,i) == u2Had{1,i}); 
    u2Had{2,i} = MinHadIndex; 
end 

這些都是代碼的兩段我想parallize。任何幫助非常感謝,如果我需要添加任何信息,請詢問。

回答

0

我不知道你的問題是在第一部分作爲什麼它工作正常(也許如果更好的界定P)

關於第二部分,你只能將信息發送到和在狹窄的情況下parloops 。

這裏改變你的代碼如下:

u2HadT = cell(1,r); 

parfor i =1:r 
    temp = min(A(:,i)); 
    MinHadIndex = find(A(:,i) == temp); 
    u2HadT{i} = {temp;MinHadIndex}; 
end 
u2Had = cell(2,r); 
for i =1:r 
    u2Had{1,i} = u2HadT{i}(1); 
    u2Had{2,i} = u2HadT{i}(2); 
end