1

タイトルに警告を表示する小さな 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 への割り当ては好きではありません。このコードは、キャッシュ メモリを台無しにするように明示的に設計されています。

4

1 に答える 1