我想我聚焦在x86,但我通常有意从32移动到64位。

从逻辑上讲,我可以看到,常数和指针,在有些情况下,将这样的程序可能是更大的更大。并分配上对效率字边界存储器的愿望将意味着分配之间更多个空白。

我还听说在x86 32位模式具有刷新其缓存时的上下文切换,由于可能的重叠4G的地址空间。

那么,什么是64位的真正好处?

和作为补充的问题,将128位是更好?

编辑:

我刚才写我的第一个32/64位程序。它使链表/ 16字节(32B型)或32字节(64B版)树对象并执行打印到标准错误很多 - 而不是一个真正有用的程序,而不是典型的,但它是我的第一个

大小:81128(32B)V 83672(64B) - 因此没有太大的区别

速度:17S(32B)V 24S(64B) - 在32位操作系统(OS-X 10.5.8)上运行

更新

我注意到,一种新的混合X32 ABI(应用二进制接口)正在开发也就是64B但用途32B指针。对于一些测试中,它会导致更少的代码,并比任何32B或64B执行速度更快。

https://sites.google.com/site/x32abi/

有帮助吗?

解决方案

除非你需要访问更多的内存寻址32B将允许您,带来的好处将是小,如果有的话。

当64B CPU上运行,则如果在运行32B或64B码(正在使用的相同的高速缓存和相同BUS)。得到接口不管相同的存储器

虽然x64体系结构有几个更多的寄存器,其允许更容易地优化,这通常是由以下事实抵消指针现在更大,使用具有较高存储器业务指针结果的任何结构。我估计相比,32B中的一可绕15-30%为64B应用在整体内存使用情况的增加。

其他提示

我通常看到计算密集型码的30%的速度的改善上x86-64的相比86。这很可能是由于这样的事实,我们有16×64位通用寄存器和16×SSE寄存器,而不是8×32位通用寄存器和8×SSE寄存器。这是与Intel ICC编译器(11.1)上的x86-64的Linux的 - 与其他的编译器的结果(例如GCC),或与其他操作系统(例如Windows)中,当然也可以不同

不管的好处,我建议你总是编译程序对系统的默认字大小(32位或64位),因为如果你编译库作为一个32位二进制,并为其提供一个64位系统,你会强迫任何人谁愿意与你的库来提供自己的库(和任何其他库的依赖)为32位二进制,当64位版本是可用的默认链接。这可能是大家很讨厌。如果有疑问,请提供库的两个版本。

对于64位的实际利益......最明显的是,你得到一个更大的地址空间,因此,如果MMAP文件,您可以一次解决更多的它(和更大的文件加载到内存中)。另一个好处是,假设编译器的优化,你的许多算术运算可以并行一份好工作(例如,将两个对32位数字的两个寄存器和执行两个在单个加载操作会增加),以及大数计算将运行得更快。也就是说,整个64位VS 32位的事情不会帮你渐近在所有的复杂性,因此,如果您正在寻找优化你的代码,你可能应该看的算法,而不是持续性因素是这样的。

修改的:结果 请忽略我对并行加法声明。这不是一个普通的附加声明进行......我令人困惑的是与一些矢量/ SSE指令。更准确的好处,除了更大的地址空间,是有更多的通用寄存器,这意味着更多的局部变量可以保持在CPU寄存器文件,这是更快的访问,比如果你把这些变量在程序栈(这通常意味着外出到L1高速缓冲存储器)。

在除了具有多个寄存器,64位的默认具有SSE2。这意味着,你可以并行执行确实一些计算。上证所扩展了其他东西了。但我想主要的好处是不必检查扩展的存在。如果是64位,它具有SSE2可用。 ...如果我没有记错的话。

仅适用于您的应用程序迁移到64位的理由是需要在诸如大型数据库或ERP应用程序的应用程序更多的内存在当应用程序缓存以提高性能2 GB的限制将很快超过并发用户的至少100秒。这是一个情况特殊的Windows操作系统,其中整数和长仍然是32位(他们有新的变量_int64,只有指针是64位的。其实WOW64在Windows x64的高度优化,使32个应用程序的低处罚上运行64位Windows操作系统。我的Windows x64上的经验是32位的应用程序版本,因为在前者的情况下至少运行10〜15%,比64位快专有内存数据库,你可以使用指针arithmatic维护b树(数据库系统的大多数处理器密集的部分) 。Compuatation这需要最高的准确度不提供两倍于32-64位操作系统大小数。这些应用程序可以在本地的,而不是软件仿真使用_int64密集型应用程序。当然,大型的基于磁盘的数据库也将展示改善了32位只是由于到使用大存储器有关缓存查询计划等等的能力。

更多数据在CPU和RAM为每个存储器获取之间传送(64位而不是32),从而能够更快地提供64位程序都写,使它们正确地利用这一点。

在X68到x68_64的特定情况下,64位程序将是大约相同的尺寸,如果没有略小,使用更多的比特存储器,并运行得更快。晴这是因为x86_64的并不仅仅有64位寄存器,它也有两倍多。 86没有足够的寄存器进行编译语言的效率,因为他们可以,所以x86代码花费了大量的指令和内存带宽移寄存器和存储器之间的数据来回。 x86_64的有很大的少,因此它需要一点点的空间更少,运行速度更快。浮点和位变换向量指令还可在x86_64的效率高得多。

在一般情况下,虽然,64位代码不一定任何更快,通常较大,既为代码和存储器使用在运行时。

由于CPU的能力的协议,需要使用64位与32位的CPU使用率,例如代码转换,显示性能和媒体再现,无论是音频或视觉的,肯定需要(在这一点上)和好处的任何应用程序与数据的绝对数量在它被抛出。这不是这么多的地址空间中的问题,因为它是数据已经被处理的方式。一个64位处理器,给64位代码,将会有更好的表现,尤其是像转码数学困难的事情和VoIP数据 - 事实上,任何形式的“数学”的应用程序应该由64位CPU和操作系统的使用中获益。证明我错了。

我编码一个国际象棋引擎。使用基于极大极小树搜索到深度9最好移动萃取(从某一位置)把在Win32配置〜17.0s和切换到x64之后现在只需〜10.3s。这是加速度的41%!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top