0

我正在尝试并行化我的两个 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

这些是我试图并行化的两段代码。非常感谢任何帮助,如果我需要添加更多信息,请询问。

4

1 回答 1

0

我不知道您在第一部分的问题是什么,因为它工作正常(也许如果您更好地定义了 P)

关于第二部分,您只能在狭窄的情况下向 parloops 发送信息和从 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 回答