В соответствии с this QA не должно быть разницы в производительности между приложением, построенным с использованием любого процессора и x64 при работе на 64-битной машине, однако я наблюдаю за двойным увеличением в моем случае использования, когда я специально построил платформу x64.Разница в производительности между AnyCPU и платформой x64 на 64-битной машине
Мое использование предназначено для обработки 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 результатов: Sum = 9745675244420464640, took 13148ms
В версии строить с платформой x64 результатов: Sum = 9745675244420464640, took 5693ms
Это больше, чем двойной прирост производительности. Почему существует такая большая разница, если общее предположение заключается в том, что любой процессор против сборки x64 должен выполнять то же самое на 64-битной машине?
это то, что с кодом optmize или без него? – Franck
Я предлагаю вам распечатать 'Environment.Is64BitProcess', чтобы проверить, что он * действительно работает с 64-битным кодом ... –
@JonSkeet вы ударите ноготь по голове. Любой процессор имеет 32-битный код. Я был под впечатлением. Любой процессор всегда будет запускать 64-битный при исполнении на 64-битной машине. Есть ли способ заставить это, или это x64 путь? – Beyers