【发布时间】:2018-11-20 20:54:40
【问题描述】:
我有一个 MATLAB 程序,我想并行运行它以使其运行得更快。但是,当我这样做时,并行工作人员似乎无法访问预先创建的全局变量。这是我的代码的样子:
createData % a .m file that creates a global variable (Var)
parfor i:j
processData() % a function that is dependent on some global variables
end
但是,我收到一条错误消息 undefined function or variable Var。我已经在函数processData() 中包含了对global 变量global Var 的调用,但这也不起作用。有什么方法可以让global 变量在并行循环中可见?
这与here 不是同一个问题,因为我在parfor 循环之外声明了全局变量,并希望在循环内访问它们而不需要在并行循环的工作人员之间修改或更新其值.
【问题讨论】:
-
我认为这个问题与您提供的链接@Adriaan 不同。我已经在 parfor 循环之外声明了全局变量,我想要做的是访问循环内的变量,而不是修改它或跨工人更新它的值
-
对不起,重读第二个答案,读第一句:“
GLOBAL数据在PARFOR内部很难使用,因为每个worker都是一个单独的MATLAB进程,而全局变量不是从客户端(或任何其他进程)同步到工作人员。”强调我的。 Ergo:工具箱的作者告诉你,在parfor之外(或在循环体中)设置global是行不通的。所有这一切都可以在parfor设置global的inside 函数。不理想,但你已经拥有了。global反正一般都不好,还不如完全避免。 -
谢谢@Adriaan。我将尝试重新表述更详细的内容,以便针对我的情况获得更集中的答案。
标签: matlab parallel-processing global-variables parfor