【发布时间】:2019-03-08 11:04:24
【问题描述】:
我正在处理一个调用多个子函数(在同一个文件中)的复杂函数。为了传递数据,偶尔使用setappdata/getappdata 机制。此外,一些子函数包含persistent 变量(为了以后节省计算而初始化一次)。
我一直在考虑是否可以在并行池中的多个工作人员上执行此功能,但开始担心可能会有一些意外的数据共享(否则每个工作人员都是唯一的)。
我的问题是 - 我如何判断 global 和/或 persistent 和/或 appdata 中的数据是在工作人员之间共享还是对每个工作人员唯一?
一些可能相关的事情:
- 就我而言,任务是完全并行的,它们的结果不应以任何方式相互影响(并行化只是为了节省时间)。
- 没有创建任何临时文件或文件夹,因此不会有一名工作人员错误地读取另一名工作人员留下的文件的风险。
- 所有
persistent和appdata 存储的变量都是在parfor的内 子函数中创建/分配的。
我知道每个worker对应一个拥有自己内存空间的新进程(大概是global/persistent/appdata工作区)。基于此和this official comment,我会说这种共享很可能不会发生……但是我们如何确定呢?
相关资料:
【问题讨论】:
-
我没有太多要添加到我的“官方评论”(!) - 但无论如何,所有
global、persistent、appdata的东西都不会在 Parallel Computing Toolbox 工作人员之间共享过程。 (通常人们希望它是。) -
@Edric 感谢您的评论。因为你在 MA 上有一个 [STAFF] 标签,所以这几乎是官方的。 :)
标签: matlab parallel-processing global-variables persistent-storage app-data