在 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
这是我正在处理的有问题的代码的摘要。基本上这个想法如下:我必须变量 i
和 k
我可以在不同 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.
从直觉的角度来看,我看不出为什么代码应该并行工作。有什么办法可以修改我的代码以获得所需的结果吗?
问题是您正在覆盖 A
。 parfor
中的循环未按顺序执行,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
在 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
这是我正在处理的有问题的代码的摘要。基本上这个想法如下:我必须变量 i
和 k
我可以在不同 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.
从直觉的角度来看,我看不出为什么代码应该并行工作。有什么办法可以修改我的代码以获得所需的结果吗?
问题是您正在覆盖 A
。 parfor
中的循环未按顺序执行,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