[英]Performance of a C# application built on AnyCPU vs x64 platform on a 64 bit machine
[英]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.