gpt4 book ai didi

matlab - 在外部 for 中使用 parfor 的两个循环错误

转载 作者:行者123 更新时间:2023-12-02 08:20:29 25 4
gpt4 key购买 nike

我需要并行化代码以节省时间。我有一个内部循环到另一个循环,我想并行化外部循环(因为我认为这样代码更快)。我的代码如下所示:

A = rand(1000,1);
B = rand(1000,1);
Biggers = zeros(1000,1000);
parfor i = 1:size(A,1)
for j= 1:1:size(B,1)
if B(i,1) > A(j,1)
Biggers(i,j) = A(j,1);
end
end
end

但是如果我以这种方式运行它,我会得到错误:

Error: The variable Biggers in a parfor cannot be classified.   
See Parallel for Loops in MATLAB, "Overview".

如果我改为并行化内部循环,则不会发生这种情况,即如果将代码设计为:

A = rand(1000,1);
B = rand(1000,1);
Biggers = zeros(1000,1000);
for i = 1:size(A,1)
parfor j= 1:1:size(B,1)
if B(i,1) > A(j,1)
Biggers(i,j) = A(j,1);
end
end
end

我不明白为什么在第一种情况下 Biggers 不被视为切片变量,因为每个工作人员都应该只关注我的变量的一行。

我该如何解决这个问题?

最佳答案

至于为什么它不能与外循环一起工作,我不确定。 MATLAB 对什么可以和什么不能进入 parfor 循环有非常严格的规定,这些规定并不总是很清楚。

“简单”的解决方案是将 inside 您的 parfor 循环中的所有内容包装到一个函数中,然后 parfor 突然吃掉所有内容。即

function Biggers = parforfunc(A,B,ii)
for jj= 1:size(B,1)
if B(ii,1) > A(jj,1)
Biggers(ii,jj) = A(jj,1);
end
end
end

将其另存为 parforfunc.m 并运行您的脚本

A = rand(1000,1);
B = rand(1000,1);
Biggers = zeros(size(B,1),size(A,1));
parfor ii = 1:size(A,1)
Biggers = parforfunc(A,B,ii);
end

关于matlab - 在外部 for 中使用 parfor 的两个循环错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37674333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com