1

我在 Visual Studio 2013 中以 RELEASE 模式运行 HM-16.15 编码器。HM-16.15 编码器是一个非常大的 C++ 程序(200k 行代码)。我有两个时间(T1 和 T2)。程序 T = T1 + T2 花费的总时间。

当我分别在 64 位模式和 32 位模式下构建和调试程序时。64 位模式与 32 位相比所用时间如下

  • T1(64bit) = T1(32bit) x 0.34 差不多
  • T2(64bit) = T2(32bit) x 0.78 差不多

据我所知,T1(64bit) 应该大于或等于 T1(32bit) x 0.5。但是这对 T1 来说是如何发生的呢?

4

1 回答 1

2

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 而 IMUL r32 是 4c)

因此看到 T1(64bit) < T1(32bit) x 0.5 并不罕见,但它也可以很容易地反其道而行之。一般来说,如果不实际测试和分析您的代码,很难预测这种关系将走向何方。

于 2017-07-24T11:24:40.783 回答