gpt4 book ai didi

matlab - 全局变量和 parfor

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

parfor 循环中,我试图调用一个访问 global 的函数但无济于事。

函数

function a = getA()
global OPTIONS;
a=OPTIONS.PROBLEM.A;
end

循环:

parfor i=1:3
b=getA();
end

错误:

Error using parallel_function (line 589)

Attempt to reference field of non-structure array.

我做错了什么?

最佳答案

来自documentationparfor 上:

The body of a parfor-loop cannot contain global or persistent variable declarations.

在您的问题的上下文中,即在 parfor 中调用一个函数,该函数又引用一个 global,这将转换为:“parfor 可能不会给出预期或有意义的结果”。

这很有道理。考虑以下内容

Lab 1:         Lab 2: 

GetB(); GetB();

如果 GetB() 的内容是这样的:

function GetB()
global B;

%# do something useful

B = rand;

end

Lab 1 引用 B 时,它的值是多少?在 Lab 2 上? rand 的不同结果是如何传达的?这将是一团糟!

编写适合 parfor 循环的代码可能真的很痛苦,因为代码来自于只有普通 for 循环的代码。通常,当您事先知道您将要编写一段计算密集型 Matlab 代码时,请从一开始就将所有函数和循环编写为 parfor 循环。只有这样,此类错误才不会让您花费一天的时间来转码您的函数。

forparfor 的转换一点都不简单

关于matlab - 全局变量和 parfor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12196122/

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