【发布时间】:2016-08-04 13:45:36
【问题描述】:
你能解释一下为什么吗
Matlab中带有parfor的以下代码不起作用,如何解决?
R=10;
Power=zeros(2,R);
parfor s=1:R
Power(1,s)=1
Power(2,s)=2;
end
【问题讨论】:
你能解释一下为什么吗
Matlab中带有parfor的以下代码不起作用,如何解决?
R=10;
Power=zeros(2,R);
parfor s=1:R
Power(1,s)=1
Power(2,s)=2;
end
【问题讨论】:
它不起作用,因为您有 1 个变量发送给不同的工作人员 (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。
【讨论】: