【问题标题】:Performance difference between AnyCPU vs x64 platform on a 64 bit machineAnyCPU 与 x64 平台在 64 位机器上的性能差异
【发布时间】:2017-02-21 04:35:14
【问题描述】:

根据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, took 13148ms

在 x64 平台发布版本中,结果为:Sum = 9745675244420464640, took 5693ms

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

【问题讨论】:

  • 是有还是没有优化代码?
  • 我建议你打印出Environment.Is64BitProcess 只是为了检查它真的正在运行 64 位代码...
  • @JonSkeet 你一针见血。任何 CPU 都在运行 32 位代码。我的印象是任何 CPU 在 64 位机器上执行时都将始终运行 64 位。有没有办法强制这样做,或者 x64 是要走的路吗?
  • 也许stackoverflow.com/questions/36438511 是相关的?
  • 成功了,取消选中 Prefer 32-bit 强制 64 位代码,谢谢。你想发布答案,还是我应该删除这个问题?

标签: c# performance clr


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 2015-05-03
    • 2013-04-25
    相关资源
    最近更新 更多