你能解释一下原因吗?
在Matlab中使用parfor
的以下代码不起作用以及如何解决它?
R=10;
Power=zeros(2,R);
parfor s=1:R
Power(1,s)=1
Power(2,s)=2;
end
答案 0 :(得分:3)
它不起作用,因为您有一个变量发送给不同的工作者(power
),并且您希望使用不同的核心在其上写入。
你如何用不同的工人写同一个变量?谁存储内存?工人如何沟通他们写的地方和不写的地方?在进行并行计算时,代码的结构非常重要,因为您需要了解发送给哪个工作者的内存。只是在传递变量时选择错误的方法会使代码比非并行代码慢。
您显示的代码可以更改为:
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 并阅读MATLAB错误指示您的“概念”部分,尤其是variable types in parfors。