簡體   English   中英

64位計算機上AnyCPU與x64平台之間的性能差異

[英]Performance difference between AnyCPU vs x64 platform on a 64 bit machine

根據此質量檢查 ,在64位計算機上運行時,使用Any CPU構建的應用程序和x64在性能上應該沒有任何區別,但是當我專門為x64平台構建時,我的用例性能會出現雙倍增長。

我的用例是操縱64位位 ,大多數處理是對位運算和對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平台的Release build中,結果為: Sum = 9745675244420464640, took 13148ms

在使用x64平台的Release build中,結果為: Sum = 9745675244420464640, took 5693ms

這是性能提升的兩倍以上。 如果通常的假設是,任何CPU vs x64版本都應在64位計算機上執行相同的工作,為什么會有如此大的差異?

不,您比較了32位和64位代碼之間的性能。 x64版本的速度更快,因為它可以使用單個64位處理器寄存器進行數學運算。 它更像是32位機器代碼中的一個口號,它必須處理兩個32位寄存器。 通過“調試”>“ Windows”>“反匯編”,可以輕松看出兩者之間的區別。

這出了錯,因為您過多地關注了解決方案平台名稱。 突出顯示,但是選擇僅對C ++項目重要。 而且,不幸的是,由於.NET Native,在UWP項目上。 它選擇了構建工具類型,C#僅具有一個可以針對任何平台的編譯器。

重要的實際設置是抖動強制選項。 項目>屬性>構建選項卡。 如有必要,選擇發布版本,然后選擇平台目標和“首選32位”設置。 取消勾選后者。 現在,您將看到在64位操作系統上,AnyCPU == x64。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM