我想知道如何在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,但是我的真实代码非常复杂,问题归结为同一个问题。
问题在于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