64位性能优势

Tri*_*ock 15 performance 64-bit

64位应用程序具有超过32位应用程序的性能优势的来源是什么?我假设有一个性能优势,因为像WinRAR这样的程序做广告.

另外,我们是否可以通过切换到64位编译器来获得这些性能优势,还是需要对代码进行任何更改?

欢迎使用与非托管代码和托管代码相关的答案.

Fer*_*cio 17

x64架构使x86架构中可用的通用寄存器数量翻倍,因此编译器能够将更多数据保存在(非常快)CPU寄存器中,而不是(相对较慢)RAM中.

  • 额外的寄存器很大.其他寻址模式可以帮助(RIP).这些通过简单的重新编译使所有代码受益.x86因低寄存器数而一直受到批评. (2认同)

Aar*_*lla 5

他们什么时候不再在广告中撒谎了?我错过了什么?;-)

主要的性能优势是,在 64 位系统中,您可以分配超过 4GB 的 RAM(实际上在大多数系统上为 2GB 以上),而无需进行交换。如果您需要的话,这将是一个巨大的速度优势。

因此,如果您的应用程序需要大量 RAM(图像/视频/音频处理、世界/宇宙模拟),64 位会具有优势。

最重要的是,64 位 CPU 还具有可操作 64 位数据类型的命令(因此您无需模拟 32 位类型的命令)。这也是一个优势,但 a) 没那么大,因为算法需要使用这些类型,而大多数算法不需要 b) 它们仍然比 32 位类型慢(但比仿真快)。

为了给你一个想法,这里有一个来自超级计算机专家的老笑话:“从磁盘加载数据需要一天的时间,然后程序需要五分钟来处理数据,然后我们需要另一天将结果保存到磁盘”。从 RAM 读取数据比访问磁盘快 1000 到 1000000 倍。

所以总而言之,对于普通用户来说,64位系统几乎没有优势。


Ioa*_*rau 4

为了利用最新 CPU 的 64 位架构,您必须:

  • 使用 64 位 CPU 和操作系统
  • 使用 64 位 api 专门针对 64 位进行开发 - 实现必须一直到使用 CPU 寄存器的最基本代码(通常用汇编程序编写)才能利用额外的寄存器。
  • 开发一个真正受益于额外寄存器的应用程序 - WinRAR 是一个将充分利用额外寄存器的应用程序,因为它涉及大量具有复杂算法的微积分。如果您使用非常简单的算法编写应用程序,它将不需要额外的寄存器地址空间,并且在 64 位上不会运行得更快
  • 还要考虑到,当您使用 CPU 寄存器时,即使您不使用整个地址空间作为值,它仍然会占用尽可能多的空间(= 64 位)..因此,以 64 位为目标编写一个小型应用程序获得优化的代码是行不通的..该应用程序将占用两倍的 RAM,如果它是在 32 位下开发的话,它可能会更慢。64 位编程对于使用繁重算法或需要分配大量内存的应用程序很有意义(4Gb 是 32 位应用程序的限制)。

  • @TripShock..请阅读此处以获取进一步的证明:http://en.wikipedia.org/wiki/64_bit#Pros_and_cons :) (3认同)
  • 为什么应用程序会占用两倍的 RAM?关于寄存器空间,您始终可以分别使用 64 位寄存器的较高部分和较低部分。因此,明智地使用寄存器自然可以解决这个问题。 (2认同)
  • 是的,两倍的空间基本上是最坏的情况。但即便如此,如果您需要使用远小于 32 位的值(例如最多 16 位表示的值),与在 32 位 CPU 上工作相比,您仍然浪费了一半的寄存器空间。一般来说,寄存器越大,内存浪费就越大。无论如何,想象一下您用汇编器以外的其他语言编写代码,您将受到编译器所做优化的摆布。在某些情况下,即使是最佳编译器也会使您的代码使用 32 位架构所需内存的两倍 (2认同)
  • RAM 使用量不会增加两倍,因为大多数整数类型仍然具有相同的大小。只有指针加倍。此外,x86_64 中有更多寄存器,这有时意味着需要更少的内存访问 => 更少的缓存未命中 (2认同)