8

Matlab の を使用して、次のプログラムを解析しましたprofile。double と uint64 はどちらも 64 ビット変数です。2 つの double を比較すると、2 つの uint64 を比較するよりもはるかに高速なのはなぜですか? どちらもビットごとに比較されていませんか?

big = 1000000;

a = uint64(randi(100,big,1));
b = uint64(randi(100,big,1));
c = uint64(zeros(big,1));
tic;
for i=1:big
    if a(i) == b(i)
        c(i) = c(i) + 1;
    end
end
toc;

a = randi(100,big,1);
b = randi(100,big,1);
c = zeros(big,1);
tic;
for i=1:big
    if a(i) == b(i)
        c(i) = c(i) + 1;
    end
end
toc;

これはプロファイルの測定値です:

プロフィールのスクリーンショット

これはtictocが測定するものです:

Elapsed time is 6.259040 seconds.
Elapsed time is 0.015387 seconds.

64 ビット データ型の代わりに uint8..uint32 または int8..int32 を使用すると、この効果はなくなります。

4

1 に答える 1