タイトルに警告を表示する小さな 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 行目に表示されます。理由がわかりません。スライスは簡単なはずです。の各列を各ワーカーに送信するだけです。コードを次のように変更すると
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 への割り当ては好きではありません。このコードは、キャッシュ メモリを台無しにするように明示的に設計されています。