![](/img/trans.png)
[英]Is it possible to use 64-bit instruction in a 32-bit application on intel/64-bit win7
[英]How should application perform in 64-bit vs. 32-bit intel architectures?
我想知道在以下场景中普通C ++应用程序的相对性能:
另外,在修改/开发应用程序以使其在64位处理器上运行得更快时,我应该考虑哪些因素?
简短的回答:你可能不会注意到很多不同之处。
更长的答案:64位x86具有更多通用寄存器,这使编译器有更多机会将局部变量优化到寄存器中以便更快地访问。 编译器还可以采用更多现代功能,例如。 不必为386优化代码,并且可以假设您的CPU具有SSE而不是旧的x87 FPU用于浮点数学。 但是指针的宽度是宽度的两倍,这对缓存来说更糟糕。
性能很可能取决于您的应用程序,并且可能会有很大差异,具体取决于您是否使用具有64位环境优化的库。 如果你想依靠加速,你应该专注于改进你的算法,而不是考虑指令集架构。
至于准备/开发64位......关键是不要对类型及其各自的大小做出假设。 如果需要具有特定大小的类型,请使用< stdint.h >中定义的类型。 每当您看到使用size_t或ptrdiff_t的函数时,您应该使用typedef而不是其他类型。
一般情况下,您不会发现只有它们支持64位操作的等效处理器,因此很难在1)和2)之间进行任何具体的比较。 另一方面,构建32位和64位模式之间的差异完全取决于应用程序。 64位版本可能比32位版本略慢或略快。 如果您的应用程序使用了大量临时变量,那么增加的64位模式寄存器集可以在性能上产生很大的差异。
根据经验,我倾向于发现32位应用程序的64位重新编译通常会使事情快30%。 它是一个粗略的数字,但它适用于我已移植到64位的许多应用程序。 基本上它的原因如上所述。 你有更多的寄存器,这是一个天赐之物,并允许更少的内存交换(这可能会被缓存,无论如何使得胜利非常小)。 某些优化也可以更容易地进行。 但是,你确实遇到了更大的指针问题,它确实消除了一些增益,更不用说由于更大的寄存器集,进行上下文切换需要更多的内存使用。
但是,64位的精心优化可以提供巨大的性能优势。
您最好的计划是重新编译为64位和配置文件。 即看哪个更好。
你有> 4G内存的要求吗? 利用内存空间真的是64位的重要原因。
你们对新的x86_64架构的多通道MC并发数据总线突发,IMC和多核功能有什么了解吗? 至少,如果64位因为使用64位总线和寄存器而不管并发突发,可以更快地优化memcpy。 至少新的arch能够同时从多个内存模块预取数据到缓存中。 和更多...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.