相关疑难解决方法(0)

"全球可能效率很低"

global在一个if命令中使用(在Matlab中)一个语句,所以我只有在真正需要时才将全局变量导入本地命名空间.

代码分析器警告我" global除非它是函数中的顶级语句,否则效率可能非常低".考虑到可能的内部实现,我发现这个限制非常奇怪和不寻常.我在考虑两种可能性:

  1. 这个警告的真正含义是" global它本身效率很低,所以不要在循环中使用它".特别是,在if中使用它,就像我正在做的那样,非常安全,而且警告发出错误(措辞不当)

  2. 警告是正确的; Matlab在后台使用了一些非常不寻常的变量加载机制,因此在if语句中导入全局变量要慢得多.在这种情况下,我想要提示或指示这些东西是如何工作的,因为我感兴趣,如果我想在将来编写有效的代码,这似乎很重要.

这两种解释中哪一项是正确的?(或者两者都不是?)

提前致谢.

编辑:更清楚:我知道这global很慢(显然我不能避免使用它,因为它是我正在使用的旧库的设计决定); 我问的是为什么Matlab代码分析器会抱怨

if(foo==bar)
    GLOBAL baz
    baz=1;
else
    do_other_stuff;
end
Run Code Online (Sandbox Code Playgroud)

但不是

GLOBAL baz
if(foo==bar)
    baz=1;
else
    do_other_stuff;
end
Run Code Online (Sandbox Code Playgroud)

我发现很难想象第一个应该比第二个慢的原因.

performance matlab global-variables

6
推荐指数
2
解决办法
2858
查看次数

全局和parfor

parfor循环内部,我试图调用一个global无法访问的函数.

功能

function a = getA()
   global OPTIONS;
   a=OPTIONS.PROBLEM.A;
end
Run Code Online (Sandbox Code Playgroud)

循环:

parfor i=1:3
    b=getA();
end
Run Code Online (Sandbox Code Playgroud)

错误:

Error using parallel_function (line 589)

Attempt to reference field of non-structure array.
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

parallel-processing matlab global-variables parfor

6
推荐指数
2
解决办法
5111
查看次数