我不明白Matlab并行计算工具箱中的parfor cicle如何与内存一起工作:我读它共享所有工作者之间的内存(然后我认为每个工作者(核心)都可以访问感兴趣的内存位置而不需要本地但是其他人的引用告诉我每个核心都会在它工作的地方制作一个本地的内存副本(变量等)!答案是什么?Parfor有共享内存系统而不是复制数据,或者每个工作者都有本地数据副本? 感谢
答案 0 :(得分:4)
如果您使用MDCS群集,PARFOR可以在多台计算机上运行,那么它必须能够将所需数据复制到工作人员。实际上,即使工作人员与桌面MATLAB位于同一主机上,它也会复制数据。部分原因是MATLAB无法理解何时共享阵列是安全的。请注意,这适用于“广播”数据,而不是“切片”数据 - 当数组“切片”时,只会将相关部分发送给每个工作人员。在下面的人为例子中:
broadcast = rand(400);
slicedIn = rand(400);
parfor idx = 1:400
slicedOut(idx) = numel(broadcast) + sum(slicedIn(:, idx));
end
然后将所有broadcast
复制到每个工作人员;而只复制slicedIn
和slicedOut
所需的部分。更多信息:http://www.mathworks.co.uk/help/distcomp/advanced-topics.html#bq_of7_-1