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

问题描述 投票:0回答:1

我想知道如何在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;

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

matlab multicore parfor
1个回答
0
投票

问题在于the parfor and the global变量:

有两个限制。

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

因此,虽然您可以在从PARFOR循环体调用的函数中使用GLOBAL变量,但它们可能不会按您的意愿运行。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.