gpt4 book ai didi

c# - AnyCPU 与 x64 平台在 64 位机器上的性能差异

转载 作者:行者123 更新时间:2023-11-30 14:07:33 28 4
gpt4 key购买 nike

根据 this QA,在 64 位机器上运行时,使用 Any CPU 和 x64 构建的应用程序之间应该没有性能差异,但是当我专门为 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 平台的发布构建中,结果是:Sum = 9745675244420464640,耗时 13148ms

在使用 x64 平台的发布版本中,结果是:Sum = 9745675244420464640,耗时 5693ms

性能提升超过两倍。如果普遍假设任何 CPU 与 x64 构建都应在 64 位计算机上执行相同的操作,为什么会有如此大的差异?

最佳答案

不,您比较了 32 位和 64 位代码之间的性能。 x64 风格要快得多,因为它可以使用单个 64 位处理器寄存器进行数学运算。它更像是 32 位机器代码中的一个 slog,它必须兼顾两个 32 位寄存器。通过 Debug > Windows > Disassembly 很容易看出两者之间的区别。

这是错误的,因为您过于关注解决方案平台名称。显示得太突出,但选择只对 C++ 项目重要。不幸的是,由于 .NET Native,在 UWP 项目上。它选择构建工具风格,C# 只有一个编译器可以针对任何平台。

重要的真正设置是抖动强制选项。项目 > 属性 > 构建选项卡。如有必要,选择发布版本并选择平台目标和“首选 32 位”设置。取消勾选后者。您现在将在 64 位操作系统上看到 AnyCPU == x64。

关于c# - AnyCPU 与 x64 平台在 64 位机器上的性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39997511/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com