3DNOW!与SSE谁更牛

Author: 杜嘉 Date: 1999年 第16期 17版

    随着AMD的K6-2和Intel奔腾Ⅲ的陆续推出,这些CPU中分别采用的3DNOW!技术和SSE技术也相继浮出水面,新一代的CPU发展方向已初露端倪。这些CPU是这样的不同,但却又如此的相似,一时间让人难以琢磨。但愿本文能让你对它们有个初步的了解。(^161701a^)
#1    AMD慧眼拓市场,Intel旁观待时机
    1998年5月28日,对于AMD来说,这绝对是个值得纪念的时刻。它的3DNOW!指令集作为关键性技术随K6-2 CPU的发布而推向了市场。霎时间,业界震惊了。单说CPU兼容厂商第一次背着盟主Intel为X86系统开发新指令,这本身就是个大新闻。AMD也因此声名大振,迅速扩大了自己的市场份额。或许多年以后,这一幕会作为一个典型的设计案例,留在计算机系统结构设计的教科书里,因为它实在给了我们太多值得回味的东西。对于一个通用CPU而言,3DNOW!带给我们的不单是从应用到硬件的设计方法,更重要的是它开辟了为通用普及型CPU进行专门优化设计的先河,进而影响整个PC系统的发展方向。正所谓,市场需求,思路对头,半年多的时间里,近千万枚K6-2被一扫而空……
    在经历了Pentium Pro未打进主流市场,MMX技术出台之初,得不到绝大多数软件支持等一系列打击之后,Intel公司似乎一下子稳重了许多。在AMD大力推广3DNOW!的时候,Intel选择了并不十分符合它作风的“一停、二看、三通过”应战策略。或许让AMD把前方的路探明并不是一件坏事。如果AMD走错了,自己便少一个对手;如果它选对了,再奋起直追,凭借自己对市场的影响力……这不,SSE来了。
#1    大同小异话差别,“软”的一手更重要
    3DNOW!和SSE虽然彼此并不兼容,但它们却很相似。究其实质,它们都试图通过单指令多数据(SIMD)技术来提高CPU的浮点运算性能;它们都支持在一个时钟周期内同时对多个浮点数据进行处理;都有支持如像MPEG解码之类专用运算的多媒体指令。一个刚说有全新的预取指令,用来缩短从较慢的内存中取数据而耽搁的时间;另一个就称运用了先进的优化内存连续数据流指令,用来提升高速缓存的命中率……嗨!真让人有一种不是冤家不碰头的感觉。
    当然也不能说它们一点差别都没有。从指令数量上看,3DNOW!只有21条指令,而SSE技术却使用了整整70条指令。似乎SSE会比3DNOW!强上许多,但是复杂的东西却未必就比简单的好,RISC(精简指令系统)逐渐取代CISC(复杂指令系统)就是个好例子。一些复杂指令不但在使用中运用效率很低,而且可能运行速度并不比多条单时钟的简单指令组合来得快。当然也不能一味地说越简单越好,那最佳点到底在哪里呢?或许这要等到下一代的多媒体指令问世时,我们才能知道。
    从指令内容上看,3DNOW!技术还实现了一条被叫做FEMMS(快速进/出多媒体状态)的指令,旨在减少MMX或3DNOW!模式与X87模式之间切换所需要的时间,而SSE则不需这样做。从实现方式来看,AMD的3DNOW!指令集仍然沿用了MMX指令使用现有浮点寄存器的设计思想(在K6-2、K6-Ⅲ上是这种方式,至于K7,估计会同奔腾Ⅲ一样采用独立的寄存器),它通过借用进行浮点运算的80位寄存器,一次对两个32位浮点数进行运算,而且CPU内部实现了两条完全并行的流水线执行机构,使得它能一个周期同时处理4个浮点数(当然,这是在没有别的指令和它争用浮点寄存器的时候)。但在若干指令都要使用浮点寄存器时冲突必然会发生,系统的吞吐量势必要受到一些限制,处理三维动画时用到的大量矩阵数据结构也会使得这些有限的浮点寄存器资源濒临枯竭。幸运的是,由于现代CPU的缓存结构,访问寄存器内存指令和访问寄存器寄存器指令几乎是一样快的。而且,为了降低编程的难度,很多程序员也承认他们常常不会使用多于4个寄存器,但这里毕竟是一个潜在的瓶颈。当然这样做也并不完全只有坏处,由于现代X86系统中指令的结构,造成了程序运行时必然会有很多传统的指令、MMX指令以及新SIMD指令频繁地交叉执行。3DNOW!的设计思想可以减少消耗在指令转换上的时间,这对乱序执行的CPU来说,无疑是十分重要的。而Intel则是另起炉灶,在CPU内新增了8个128位寄存器,在一个周期内可以实现8个浮点数的运算,比3DNOW!的效率高一倍。SSE技术却更符合三维运算中的数据结构模型,它能更有效地处理浮点操作。通过新设置的超长寄存器,它可以在一个时钟周期内完整地处理三维数据中的一维空间数据,中间不会再有什么停滞,如果从矩阵运算的角度看,这至少节约了三次乘法运算时间。当然3DNOW!的效果就要差一些了,它必须通过协调两条流水线来达到一周期完成4次浮点运算的目的。对于像三维空间处理这种完整性很强的数据类型而言,根本没必要把它割裂开来。所以当3DNOW!在遇到系统载荷较大的情况时,往往不得不用两个时钟周期来完成本该在一个时钟周期内完成的任务。反观SSE,由于是新增的单独处理部件,不会出现争用寄存器的情况,所以在峰值运行速度上,SSE应该有较大优势。
    这么看来,在硬件设置上,Intel的SSE技术还是略处于领先地位了。那软件支持方面又如何呢?现在的情况是,由于AMD的3DNOW!技术比SSE要早推出九个多月的时间,所以它的软件支持方面似乎要好一些,微软的DirectX6.0和SGI的OpenGL等众多的标准应用程序接口已经完全支持3DNOW!了,3Dfx、ATI、nVIDIA等显示芯片厂商和一些游戏厂商也为3DNOW!准备了新的驱动程序;而SSE由于刚刚问世不久,虽然很多软件生产厂家已经宣布要为它做优化,但真正实施起来,恐怕还有很长一段路要走。不过从长远来看,经过一段时间的运作,作为CPU霸主的Intel要想获得大量软件开发商的支持可能不会是什么难事。不管硬件性能如何,其实两种指令集的真正较量还要看软件的优化程度,否则再先进,没人用也是徒劳无益的。
#1    前景分析
    细细想一下,它们的未来可能还真有些差别。先说3DNOW!吧,这种对MMX设计思想继承得很好的后续指令集,由于在微处理器结构上改动不大,且已上市有较长时间,软件优化更容易些。反观Intel的SSE技术,全新的设计会带给它比3DNOW!更强劲的驱动力,如果都实现完全优化,SSE的效果应该比3DNOW!要高出一头。但要享受这个技术恐怕要等一段时间,毕竟新的结构增加了软件开发者优化的难度,只是简单的几个补丁是不可能把它的优势全都开发出来的。从AMD在3DNOW!使用上的市场策略可以看出,它是准备把新一代的CPU技术带进主流市场,从低价位的K6-2到桌面型的K6-Ⅲ再到将来的K7都使用这一技术;而Intel的做法似乎让人有些难以理解,目前只有高价位的PentiumⅢ采用这一新技术,这种对1000美元以下市场视而不见的行为,会使SSE的流行时间表被进一步推迟。
    综上所述,3DNOW!在近期会比SSE更牛气,但从中长期来看,或许SSE的技术优势更大一些,不过,SSE要想吃掉3DNOW!也不太可能,它们还会共处很长一段时间,直至更新的多媒体指令集问世。