在MATLAB中嵌套parfor循环中访问变量

时间:2016-02-02 09:43:06

标签: matlab parallel-processing parfor

在MATLAB中考虑以下代码:

function parallelProblem
N = 10;
A = rand(N);
parfor i=1:N
    for k=2:N
        A(i,k) = f(A(i,k-1));
     end
end

end

function y=f(x)
y = x;
end

这是我正在处理的有问题的代码的摘要。基本上这个想法如下:我必须使用变量ik,我可以执行我的计算,不同i之间没有通信,但k的不同值之间的通信是必需的。

因此,我希望将循环并行化i。但是,对于上面的代码,我得到了错误

parallelProblem

Error: File: parallelProblem.m Line: 6 Column: 9
The variable A in a parfor cannot be classified.
See Parallel for Loops in MATLAB, "Overview".

将鼠标悬停在parfor(带下划线)字样上

The PARFOR loop can not run due to the way the variable 'A' is used.

并将鼠标悬停在f(A(i,k-1))

Valid indices for 'A' are restricted in PARFOR loops

In PARFOR loop, variable 'A' is indexed in different ways, potentially causing dependencies between iterations.

从直观的角度来看,我认为没有理由为什么代码应该并行工作。有什么办法,我可以修改我的代码以获得所需的结果吗?

1 个答案:

答案 0 :(得分:1)

问题是你要覆盖Aparfor中的循环不按顺序执行,MATLAB会发现您正在覆盖A的值,然后使用它们。您可以使用辅助变量轻松解决此问题:

function parallelProblem

N = 5;
A = magic(N);
Aresult=[];
parfor i=1:N,N
    b=[];
    for k=2:N
        b(k) = f(A(i,k-1));
    end
   Aresult(i,:)=b;
end

end