this QAによると、64ビットマシンで実行されているAny CPUとx64を使用して構築されたアプリケーションのパフォーマンスに違いはありませんが、私のユースケースでは、特にx64プラットフォーム用に構築されたときのパフォーマンスが向上します。AnyCPUと64ビットマシン上のx64プラットフォームのパフォーマンスの差
私の使用例は、64ビットbitboardsを操作するためのものであり、処理の大部分はビット演算とulong
変数の算術演算です。一例として、
:リリースで
public static ulong ReverseBits(ulong x)
{
ulong t;
x = (x << 32) | (x >> 32); // Swap register halves.
x = (x & 0x0001FFFF0001FFFFUL) << 15 | // Rotate left
(x & 0xFFFE0000FFFE0000UL) >> 17; // 15.
t = (x^(x >> 10)) & 0x003F801F003F801FUL;
x = (t | (t << 10))^x;
t = (x^(x >> 4)) & 0x0E0384210E038421UL;
x = (t | (t << 4))^x;
t = (x^(x >> 2)) & 0x2248884222488842UL;
x = (t | (t << 2))^x;
return x;
}
static void Main(string[] args)
{
ulong sum = 0;
var s = Stopwatch.StartNew();
for (ulong i = 0; i < 1000000000; i++)
{
sum += ReverseBits(i);
}
s.Stop();
Console.WriteLine("Sum = {0}, took {1}ms", sum, s.ElapsedMilliseconds);
Console.ReadLine();
}
結果がされているすべてのCPUプラットフォームでビルド:x64プラットフォームでのリリースで Sum = 9745675244420464640, took 13148ms
構築の結果は次のとおりです。以上ですSum = 9745675244420464640, took 5693ms
ダブルパフォーマンスが向上します。どのような大きな違いがあるのでしょうか?一般的な前提として、任意のCPU vs x64ビルドが64ビットマシンで同じものを実行する必要があります。
はoptmizeコードの有無にかかわらずですか? – Franck
'Environment.Is64BitProcess'を印刷して、実際には64ビットコードを実行していることを確認することをお勧めします。 –
@JonSkeetあなたは頭の爪に当たっています。どのCPUも32ビットコードを実行しています。私は印象に残っていた64ビットマシン上で実行されると、常にどのCPUも64ビットを実行します。これを強制する方法はありますか、またはx64は行く方法ですか? – Beyers