私の質問はばかげているように見えるかもしれませんが、なぜこの非常に単純なコードでパフォーマンスが向上するのか、非常に興味があります。
アセンブリコードは次のとおりです。
__asm {
mov eax, 0
mov ecx, 0
jmp startloop
notequal:
inc eax
mov ecx, eax
sub ecx, 2
startloop:
cmp eax, 2000000000
jne notequal
};
これはCコードです:
long x = 0;
long ii = 0;
for(; ii < 2000000000; ++ii)
{
x = ii - 2;
};
C コードは、i5 2500k マシンで完了するのに約 1060 ミリ秒 (リリース ビルドで) かかり、アセンブリは 780 ミリ秒で終了します。速度が最大 25% 向上します。25% の差が大きいため、なぜこの結果が得られるのかわかりません。コンパイラは、私が書いたものと同等のアセンブリ コードを生成するほどスマートではありませんか?
ところで、MSVC 2010 を使用しています。
ありがとう
これは、MSVC によって生成されている (asm) コードです。
$LL3@main:
; Line 36
lea esi, DWORD PTR [eax-2]
inc eax
cmp eax, 2000000000 ; 77359400H
jl SHORT $LL3@main
この場合、リー命令は何をしますか?
更新 2
皆様、本当にありがとうございました。Nehalem xeon cpu でこのコードをテストしたところ、結果は同じです。理由は不明ですが、asm コードは Sandy ブリッジでより高速に実行されるようです。