在matlab的parfor中调用函数时访问全局变量



我想知道如何在调用parfor循环中的函数时轻松访问全局变量?例如,示例代码如下,

global a
a = 132.1;
A = [0, 0, 0];
for i=1:3
    A(i) = test(i);
end

测试功能为

function f = test(v)
global a
f = a+v;

这种格式的代码应该是正确的,但是,如果我将for改为parfor,就会出现问题。我认为主要的问题是全局变量a。那么我该如何修改代码呢?虽然在这个例子中,修改很容易,不需要parfor,但我的真实代码非常复杂,问题归结为同一个问题。

问题在于parfor和全局变量:

有两个限制。

You cannot place a GLOBAL declaration directly inside a PARFOR loop
The MATLAB workers executing the body of your PARFOR loop are separate MATLAB processes, and the values of global variables are not synchronised

因此,虽然您可以在从调用的函数中使用GLOBAL变量你的PARFOR循环的主体,它们可能没有按照你的意愿行事。

因此,在我看来,可以将a变量传递给循环,并避免全局变量,这对于函数编程和一般编程来说都是一个很好的规则。还有其他类似的解决方案:

http://www.mathworks.com/matlabcentral/fileexchange/31972-worker-object-wrapper

相关内容

  • 没有找到相关文章

最新更新