32位处理器和64位到底有什么不同?
关于32位处理器和64位处理器有很多讨论和争论,有很多不同的观点,我本人也没有非常非常深入地研究这些。但是常常被朋友问及诸如下面这些问题,只能是一家之言,作为参考:
问题1:64位比32位可以用到更大的内存,这是它的最显著的特性,这使得很多需要大内存的应用程序可以运行。大内存的应用,减少了读写硬盘的时间,同时,CPU大缓存的应用也协调了CPU与内存之间的速度差异,使很多程序运行时间大大缩短。但我有一个问题:是不是只有那些需要大内存的程序才能体验64的优势,而那些内存需求小的程序的性能提升不明显?
回答1:这一点你很对:64位技术支持的大内存是科学与技术计算领域所非常需要的,尤其是smp系统。应该说,从32位到64位,就像从8位到16位,从16位到32位一样,我们获得了额外的并行处理能力,性能是稳步提升的。但是,从32位到64位,不仅仅是位数的增加,处理器的结构和设计也在变化,同时还融入了更多的设计思想。
我的观点是:不能笼统地说64位比32位有什么优势。应该全面比较64位时代的处理器与32位时代的处理器的差异,64位时代的处理器比32位时代的处理器性能的提升不仅仅是位数的增加带来的。处理器的比较,涉及到功能单元,指令集,和各种性能提升技术,一句两句说不清楚,我们可以找个时间再聊。
我认为应该这样说:一个程序能不能体验64位时代处理器的优势,能不能得到性能的提升,取决于程序计算的本质。如你所说,一个需要大内存的程序,就能够体验到64位大内存的优势;一个程序的计算本质正好适合64位时代处理器的结构、指令集、功能单元设计等等方面的各种特性,这个程序就应该得到性能的提升。比如说,如果一个程序不需要很大的内存,但需要频繁存取内存,则Opteron的cpu中集成的内存控制器就对性能的提升大有帮助。当然了,所有这些都需要编译器的支持。
问题2:从软件角度考虑,64位要发挥应有的性能需要64位软件的支持,在一个兼容32位技术的64位机上运行32位程序,性能也得不到提升。
回答2:最初安腾2是不兼容32位的,后来Opteron支持32位与64位兼容模式,intel也不得不跟进。兼容模式主要是商业考虑,会增加处理器设计难度,对64位没有什么好处。如果你的32位程序不能针对64位处理器进行优化,性能得不到提升是正常的。
问题3:是否即使有了64位CPU,大内存,64位软件,对于某些应用64位也未必比32位快?我做了一个测试,同样的任务在Itanium2 1.3和Xeon 2.8的机器跑,Itanium2要略慢些,我的程序用时主要消耗在CPU上(而非IO和网络上),是否对于这种CPU密集型程序,64位技术并没有明显优势,在这种情况下CPU的计算能力(整数,浮点)是决定性因素,虽然64位能够带来是整体性能的提升,但是在CPU 运算能力成为瓶颈的时候,Itanium还是会输给高主频的Xeon?
回答3:假设64位处理器具有很多优点,设计合理,它也只是有了使程序性能得到提升的潜能。至于能不能得到提升,还受到很多因素影响。编译器是最关键的因素之一。所谓高性能计算,这个"性能"二字才是最关键的。性能的追求永远是无止境的。性能的追求是很难的,这就是我们UnitedHPC希望能够为客户服务的地方。一个高性能计算程序要针对计算机的结构、问题特性,以至于处理器的类型进行优化,才能最终得到你所需要的性能。我就见过客户的程序经过性能优化得到100倍性能提升的例子。我自己就亲自处理过客户程序经过性能优化得到30倍性能提升的例子。你的例子,我现在不好作评论。如果你愿意,有时间我们可以坐下来研究一下。