簡體   English   中英

為什么我的程序在64位模式下以RELEASE模式在MS Visual Studio 2013中花費的時間是32位模式下所花費的時間的三分之一

[英]Why the time taken by my program in MS Visual Studio 2013 in RELEASE mode in 64-bit mode is one-third of the time taken in 32-bit mode

我在Visual Studio 2013的RELEASE模式下運行HM-16.15編碼器。HM-16.15編碼器是一個非常大的C ++程序(200k行代碼)。 我有兩個時間(T1和T2)。 程序花費的總時間T = T1 + T2。

當我分別在64位模式和32位模式下構建和調試程序時。 與32位相比,在64位模式下花費的時間如下

  • T1(64位)= T1(32位)x 0.34近
  • T2(64位)= T2(32位)x 0.78近

據我所知,T1(64位)應大於或等於T1(32位)×0.5。 但是T1會如何發生?

x86_64 (64位)平台的寬度是x86 (32位)寬度的兩倍多。

除了較寬的寄存器(64位而不是32位)之外,x86_64還具有:

  • 8個以上通用寄存器(r8,r9,r10,r11,r12,r13,r14,r15)
  • 8個以上流式(SSE)寄存器
  • 矢量擴展(AVX)
  • 更多指令,例如指令指針相關數據訪問
  • x86_64 調用約定使用更多寄存器進行參數傳遞,並且比32位cdecl或什至fastcall(Windows ABI)更快
  • x86_64 CPU上的某些算法在64位模式下可能比32位模式下更快(例如IMUL r64為3c vs. IMUL r32為4c)

因此,看到T1(64bit)<T1(32bit)x 0.5並不稀奇,但也可以很容易地采用其他方法。 通常,如果不實際測試和分析代碼,就很難預測這種關系的發展方向。

暫無
暫無

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

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