【问题标题】:What is the impact of compiling a program in 32 bits mode regarding optimizations以 32 位模式编译程序对优化有什么影响
【发布时间】:2014-02-18 23:03:37
【问题描述】:

在 64 架构上以 32 位模式编译应用程序时引入的性能差异有哪些?

例如,在运行 64 位版本 Linux 的机器上使用带有 -m32 选项的 gcc。

程序会在编译时充分使用 SIMD 指令吗?

普通程序是否会极大地受益于额外的寄存器?

【问题讨论】:

  • 不是重复的,而是相关的:stackoverflow.com/questions/12224809/…
  • 指针操作数的大小将减半,因此二进制文件更紧凑,为您提供更好的缓存使用并很可能提高性能提升
  • “大幅缩减的指令集?” - 不;你为什么会这样想? “大量的性能损失?” - 不;为什么你会这样认为?
  • @Jim。我匆忙下结论,所以我稍微完善了我的问题。

标签: c gcc 64-bit


【解决方案1】:

假设您没有大量使用大型 mmap 或 long long 类型,则性能损失最多只有几个百分点,可能根本没有什么意义。 64 位版本也可能更大,考虑到在低资源系统上导致内存分页的可能性,这无论如何都可能是一个劣势。将会有更多的寄存器可用,但在大多数程序中,这对速度的影响仍然很小。

指令集不会因此减少,它根本不会使用 CPU 的 64 位模式,因此不会使用 64 位扩展版本的指令。

在此处查看有关性能影响的更多信息: http://en.wikipedia.org/wiki/64-bit_computing#32-bit_vs_64-bit

【讨论】:

  • 根据我自己的经验,将 32 位代码重新编译为 64 位后,性能提高了约 10%,无需任何其他更改。我查看了 asm 输出,好处来自额外的寄存器。
  • @BitBank 嗯,这些都是有趣的发现,它是什么样的代码?正如我发现的那样,一些数学代码确实受益匪浅。您是否尝试过使用 X32 ABI 编译所述代码,将其编译为 32 位而不删除完整的寄存器集?它可以让你检查它是否纯粹是那些提供利益的人。
  • 对于我的绝大多数代码,我从不依赖编译器来获得高性能。我用 asm 编写的任何时间关键部分。
猜你喜欢
  • 2021-04-25
  • 2020-04-14
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 2020-03-12
  • 1970-01-01
相关资源
最近更新 更多