Parfor循环不工作,如何解决?
问题描述:
我正在尝试两个我的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。任何帮助非常感谢,如果我需要添加任何信息,请询问。
答
我不知道你的问题是在第一部分作为什么它工作正常(也许如果更好的界定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