MATLAB PARFOR:内存管理:是否共享内存?

vol*_*ssa 3 parallel-processing matlab memory-management shared-memory parfor

我不明白Matlab并行计算工具箱中的parfor cicle如何与内存一起工作:我读到它在所有工作人员之间共享内存(然后我认为每个工作人员(核心)都可以访问感兴趣的内存位置而无需制作本地副本)但是其他参考资料告诉我,每个核心都会在其工作的地方创建内存(变量等)的本地副本!答案是什么?Parfor 有共享内存系统并且不制作数据副本或者每个工作人员都有数据的本地副本?谢谢

Edr*_*ric 5

由于 PARFOR 可以跨多台机器运行(如果您使用的是MDCS集群),那么它必须能够将所需的数据复制到工作线程。事实上,即使工作线程与桌面 MATLAB 位于同一主机上,它也会复制数据。造成这种情况的部分原因是 MATLAB 无法了解何时可以安全地共享数组。请注意,这适用于“广播”数据,而不是“切片”数据 - 当数组被“切片”时,只有相关部分会发送给每个工作人员。在下面的例子中:

broadcast = rand(400);
slicedIn  = rand(400);
parfor idx = 1:400
    slicedOut(idx) = numel(broadcast) + sum(slicedIn(:, idx));
end
Run Code Online (Sandbox Code Playgroud)

然后所有的都broadcast被复制到每个worker;而仅复制slicedIn和所需的部分。slicedOut更多信息请参见:http://www.mathworks.co.uk/help/distcomp/advanced-topics.html#bq_of7_-1