在parfor循环中使用全局变量的异常

5次浏览(最近30天)
tom3w
tom3w 8月8日
评论道: tom3w8月9日
你好,
我在Matlab中心读到,Matlab不允许在parfor循环中使用全局变量。尽管如此,在某些情况下,“全局”变量在个体工作者级别/parfor迭代中仍然是非常重要的。
例子:我想执行一个代码几个独立的实体(每parfor迭代一个实体),这个代码是相当复杂的,依靠嵌套函数和大量的参数存储在全局变量为了从容(容易得多比所有参数传递函数输入)。
更具体地说,我接受这样一个事实,即在工作层/为给定迭代定义的全局变量不能在客户机层或在另一个工作层/另一个迭代之后使用(在并行计算的情况下,这将是无意义的),但我感到非常尴尬的是,全局变量不能在每个给定迭代的工作层定义,只能在那个特定的工作层/迭代中使用。换句话说,我在这里谈论的“全局变量”只在工作者级别有效,这意味着“全局”术语在经典意义上不成立,但仍然适用于这些变量的使用方式(例如,定义并在单独的函数中调用它们)。
是否有可能迫使Matlab允许这种使用?如果没有,是否已经有一个允许它的补丁,或者可以在下一个版本中预见它(希望很快)?
感谢和欢呼,
2的评论
tom3w
tom3w 8月8日
谢谢,这个选择确实是有效的。我仍然在检查是否仍然可以为此目的使用全局变量;如果不是这样,我可能会实现这个。

登录评论。

接受的答案

沃尔特·罗伯森
是否有可能迫使Matlab允许这种使用?
没有
如果没有,是否已经有一个允许它的补丁,或者可以在下一个版本中预见它(希望很快)?
没有 .这在短期内不太可能得到支持。金宝app
解决方法并不困难:将对全局变量的引用放在parfor函数体中调用的函数中。正如您指出的,您仍然必须管理全局变量应用于每个worker的事实。
3评论
tom3w
tom3w 8月9日
谢谢沃尔特的建议。我可能会使用输入结构来替换parfor循环之前初始化的全局变量,作为补充,在工作层初始化“全局”变量,以便在该层的局部使用。

登录评论。

更多的答案(0)

下载188bet金宝搏

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!