gpt4 book ai didi

MATLAB parfor 广播变量值错误

转载 作者:太空宇宙 更新时间:2023-11-03 20:15:30 26 4
gpt4 key购买 nike

在这段最小的可执行代码中:

a = [];
workers = parpool('local',4);
someboolean = false;
parfor i = 1:4
if someboolean % broadcast variable
b = a(i); % ERROR
else
b = 0;
end
end

... someboolean 的值为 'true' 并执行无效行导致以下错误:

Error using bugscript (line 4)
Index exceeds matrix dimensions.

行号指的是最后一条非平行线,如果删除 b = a(i) 赋值,错误就会消失。

我没能在互联网上找到其他遇到同样问题的人。谁能解释这是怎么回事?我正在使用 MATLAB R2015a。

最佳答案

问题是因为 MATLAB 执行静态代码分析以确定每个工作人员通过循环的每次迭代需要哪些变量。由于它看到您正在循环内访问 a(i),因此它会尝试获取该值并使其可供本地工作人员使用,以防它需要它。 sliced variables 的这种行为有必要通过仅发送该迭代访问的数据来减少发送给每个工作人员的数据量。如果 a 有数千个值,而您每次迭代只访问其中一个值,这一点尤其重要。您只想发送 a 中的单个条目,而不是整个数组。

在您的情况下,它会尝试访问 a(i) 以发送给工作人员,并且是 this 进程(而不是循环内容本身)导致错误你看到的。

不用担心,广播变量 someboolean 的值 实际上是 false 正如您所期望的那样,您可以确认它与以下循环。

parfor i = 1:4
disp(someboolean)
end

作为解决方案,我会简单地为 a 预分配值,以便 a 的切片成功,并且能够将有效数据发送给工作人员(即使它没有被使用)。

a = NaN(1,4);

关于MATLAB parfor 广播变量值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41168503/

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