我有一个小 parfor 测试脚本,它在标题中给出警告。代码是这样的
out = zeros(10, 1);
in = rand(5e8, 10);
tic
parfor i = 1:10
for j = 1:5e8
p = floor(rand(1,1)*5e8);
out(i) = out(i) + in(p, i);
end
end
toc
tot = sum(out)
关于如何访问变量 in 的警告出现在第 7 行。我不明白为什么,切片应该是微不足道的。只需将 in 的每一列发送给每个工人。如果我将代码更改为
out = zeros(10, 1);
in = rand(5e8, 10);
tic
parfor i = 1:10
a = in(:,i);
for j = 1:5e8
p = floor(rand(1,1)*5e8);
out(i) = out(i) + a(p);
end
end
toc
tot = sum(out)
警告消失了,但我不喜欢对 a 的分配。该代码被明确设计为破坏高速缓存。