0

2 つの for ループを並列化し、リモート クラスターで実行しようとしています。

最初に matlabpool open local 12 を使用し、最後に matlabpool close を使用しています。私が直面している問題は、parfor ループが行列を適切に使用できず、それが機能するように書き直す方法がわからないことです。

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

これらは、私が並列化しようとしているコードの 2 つのセグメントです。何か助けをいただければ幸いです。さらに情報を追加する必要がある場合は、お問い合わせください。

4

1 に答える 1

0

最初の部分では問題なく動作するため、問題が何であるかわかりません(おそらく P をより適切に定義した場合)

2 番目の部分に関しては、狭いケースでのみ 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
于 2012-07-24T02:00:08.087 に答える