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

Access variable in nested parfor loop in MATLAB

在 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.

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

问题是您正在覆盖 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