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