对 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 错误会将您引导至该部分。
你能解释一下为什么吗
以下带有 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 错误会将您引导至该部分。