对 Matlab 中的 parfor 有疑问?

Doubts with parfor in Matlab?

你能解释一下为什么吗 以下带有 parfor 的代码在 Matlab 中不起作用,如何解决?

R=10;
Power=zeros(2,R); 
parfor s=1:R
    Power(1,s)=1
    Power(2,s)=2;
end

它不起作用,因为您有 1 个变量发送给不同的工作人员 (power),并且您想使用不同的核心在其上写入。

你怎么能用不同的工人写同一个变量?谁储存记忆?工人如何交流他们在哪里写,哪里没有写?在进行并行计算时,代码的结构非常重要,因为您需要知道将哪些内存发送给了哪些 worker。仅仅选择错误的传递变量方法会使您的代码比非并行代码慢。

您显示的代码可以更改为:

R=10;
Power1=zeros(1,R);
Power2=zeros(1,R); 

parfor s=1:R
    Power1(1,s)=1
    Power2(1,s)=2;
end
Power=[Power1;Power2]

我建议你去 http://uk.mathworks.com/help/distcomp/parallel-for-loops-parfor.html 并阅读 "concepts" 部分,尤其是 variable types in parfors,MATLAB 错误会将您引导至该部分。