![](/img/trans.png)
[英]Is it possible to use 64-bit instruction in a 32-bit application on intel/64-bit win7
[英]How should application perform in 64-bit vs. 32-bit intel architectures?
我想知道在以下場景中普通C ++應用程序的相對性能:
另外,在修改/開發應用程序以使其在64位處理器上運行得更快時,我應該考慮哪些因素?
簡短的回答:你可能不會注意到很多不同之處。
更長的答案:64位x86具有更多通用寄存器,這使編譯器有更多機會將局部變量優化到寄存器中以便更快地訪問。 編譯器還可以采用更多現代功能,例如。 不必為386優化代碼,並且可以假設您的CPU具有SSE而不是舊的x87 FPU用於浮點數學。 但是指針的寬度是寬度的兩倍,這對緩存來說更糟糕。
性能很可能取決於您的應用程序,並且可能會有很大差異,具體取決於您是否使用具有64位環境優化的庫。 如果你想依靠加速,你應該專注於改進你的算法,而不是考慮指令集架構。
至於准備/開發64位......關鍵是不要對類型及其各自的大小做出假設。 如果需要具有特定大小的類型,請使用< stdint.h >中定義的類型。 每當您看到使用size_t或ptrdiff_t的函數時,您應該使用typedef而不是其他類型。
一般情況下,您不會發現只有它們支持64位操作的等效處理器,因此很難在1)和2)之間進行任何具體的比較。 另一方面,構建32位和64位模式之間的差異完全取決於應用程序。 64位版本可能比32位版本略慢或略快。 如果您的應用程序使用了大量臨時變量,那么增加的64位模式寄存器集可以在性能上產生很大的差異。
根據經驗,我傾向於發現32位應用程序的64位重新編譯通常會使事情快30%。 它是一個粗略的數字,但它適用於我已移植到64位的許多應用程序。 基本上它的原因如上所述。 你有更多的寄存器,這是一個天賜之物,並允許更少的內存交換(這可能會被緩存,無論如何使得勝利非常小)。 某些優化也可以更容易地進行。 但是,你確實遇到了更大的指針問題,它確實消除了一些增益,更不用說由於更大的寄存器集,進行上下文切換需要更多的內存使用。
但是,64位的精心優化可以提供巨大的性能優勢。
您最好的計划是重新編譯為64位和配置文件。 即看哪個更好。
你有> 4G內存的要求嗎? 利用內存空間真的是64位的重要原因。
你們對新的x86_64架構的多通道MC並發數據總線突發,IMC和多核功能有什么了解嗎? 至少,如果64位因為使用64位總線和寄存器而不管並發突發,可以更快地優化memcpy。 至少新的arch能夠同時從多個內存模塊預取數據到緩存中。 和更多...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.