imjacob的专栏

首页博文目录订阅
正 文

缅怀我们的童话NetBurst的成功与教训

(2009-4-17 21:43)

最近把自己的老p4升级了一下,但是还是p4,只不过频率提升了点,但性能是高了很多。所以对这方面挺感兴趣,今天看到一片好文章。

=======================================================
在CORE上市半年以后,终于在去年底看到了Intel将于2007年底全部停产基于NetBurst架构CPU的消息。但就在一个月前,IBM也暴光了他的下一代POWER6处理器的更多细节——如果有人仔细研究过这些细节,大概会得到一个另人吃惊的信息——POWER6的架构与NetBurst有着众多的相似之处! 
        在网络上经常可以看到对NetBurst(Pentium4)的斥责以及对 K8(Athlon?64)与Core(P8?)的褒奖。也经常可以看到诸如“长流水线低能论”,“高频无用论”之类的说法。伴随着主角的离去,它将渐渐的变为只在人们记忆中的存在。但错误的认识不应随着它一起被封存起来。终归,是时候为它“盖棺定论”了。

自从2000年Willamette核心的Pentium?4问世以来。 Intel已经相继推出了NorthWood、Prescott等等一系列的基于NetBurst架构的处理器,由此衍生出众多如Pentium?4、 Celeron?4/D、XEON、Pentium?D/EE等型号的CPU。NetBurst架构垄断Intel的主流民用级CPU设计长达6年之久,算的上史上寿命最长的微构架之一。 

                                             
我常常用工厂车间与工人来比喻CPU的流水线设计,虽然也许不够确切,但也还算直观。如果用它来形容NetBurst的思路,那就是一个“大舰巨炮”主义下的设计。                                                                                                                                                                                        
  为一块CPU(工厂)提升处理能力,最重要的是什么呢?解决这个问题有着很多的思路,而NetBurst的思想很明确,那就是提升处理器流水线的级数,这个做法相当于是在工厂里塞进大量的工人。从最初的 Willamette,到末期的Prescott,Intel不断地增加CPU的流水线级数,最终达到了惊人的31级,这比上一代的图拉丁Pentium Ⅲ已经多了3倍!                                                                                                                         
增加流水线级数的好处是显而易见的,它使得CPU潜在的处理能力有着大幅提升,但也有着很多缺点。我们再拿工厂做例子:如果Prescott是一条流水线,这条流水线上有31位工人,每个人都负责相对较轻的任务,例如第一个人打开盖子,第二个人拧上螺丝,第三个人......流水线越长,运算就越简单。这样的设计对付大数据的任务非常有效,但是对付小数据量的简单任务时,则有“ 杀鸡用牛刀”的味道。事实上,我们日常用到的指令,多数都是简单指令,在处理这样的指令时,超长流水线的设计会存在很大的延迟,单周期处理的指令数有限,效率不高。为了改善这一状况,唯一的办法就是提高流水线的速度,减短处理的周期,这样做的直观的表现就是CPU的频率大幅提升。
简单地总结一下,NetBurst的设计思想无非是三点:低效(相对)、高频、长流水线,对于“通用型处理器”来讲,这样的设计可以在保持高性能的情况下兼顾各种情况下的运用。单纯就思路来说是很容易说明的。但要将这个想法转化为现实,却是一件困难的事,就当初的设计水准来讲,为NetBurst从纸面到成品的转变,Intel付出了长期而艰辛的努力                                                                                                                                                                                                                                                                                               
起初,Intel对NetBurst抱有极大的信心。实际上,在今天受到众多用户追捧的Core?2?Duo(以及它的前辈Pentium3、PentiumM)的P8(?)、P6架构,在当时看来只是一种用来过渡到 NetBurst的东西,单纯从设计思想上分析,两种架构的优劣很容易看的出来。                                                                                                                                                                              
  在长久的等待后,2000年,Intel发布了第一代的 Willamette核心的Pentium4,并大肆宣传NetBurst的先进性。但是现实却给了Intel一个不小的打击,这种打击不仅来自于它的对手AMD的K7,也来自于Intel自己。虽然Willamette核心的Pentium?4的频率已经达到了1.7GHz,但是有测试表明,它的性能还不如上一代的PentiumⅢ(图拉丁)?。为了摆脱在民用市场上两代CPU自相残杀的尴尬局面,Intel甚至将图拉丁PentiumⅢ“升格”为服务器用的“PentiumⅢ-S”,但是这一切的作为都无济于事                                                                                                                                                                  
从今天看来,Willamette是NetBurst实践的初代产物,在设计上很不成熟。当初受到毒龙频率首先突破1GHz的刺激,从Willamette开始追求更高的频率。受限于当时的180nm工艺及平台的限制,过小的 L2以及还是不够高的频率,加上不成熟的Socket423接口,使得Willamette饱受批评。                                               
  这里要向大家解释一下L2对于Pentium?4的重要性,经常看到有人拿Athlon?64与Pentium?4的L1、L2直接进行比较。实际上,因为Athlon?64集成MC(内存控制器),拿两者直接对比毫无意义。Pentium?4采用较小的L1,并引入了一级追踪缓存来代替一级数据缓存,如果以镖来比喻L1,那么L2便是靶子,大的L2可以大幅提高数据的命中率。                                    
  Intel并没有因为起初的不顺而放慢脚步,在接近两年的研究后,于2002年1月推出了新的NorthWood(北木)核心,“北木”被认为是Pentium4系列里最成功的一个架构。                                                 
随着新的130nm工艺引入、前端总线的飚升、HT超线程技术、以及双通道 DDR内存的出现,这都帮助Intel在北木时代开始铸造经典的Pentium?4形象。事实上就性能来说,北木已战胜了K7-巴顿。如果不是市面上大量出现了廉价白板巴顿2500+,也许AMD的历史就该重写了。                   
  事实上在流水线的设计上,北木与威廉几乎完全一致。但是性能上却差距很大。这也从侧面证明了流水线的长短与处理器性能不直接挂钩,如果有合适的环境,NetBurst将有更大的发挥空间。                   
  威廉与北木“两代”架构充分的论证了NetBurst的可行性,也大大增加了Intel继续研发NetBurst的信心。在两年后,2004年2月,末代Prcscott核心Pentium?4问世。这同样是一个经典的架构,但恐怕也将是历史上受争议的架构之一。  Prcscott采用了90nm制程,31级流水线的设计,集成了更多的晶体管,频率也飚升至3.8GHz。自发布以来使用至今,并根据接口、制程、单双核的区别衍生出了Smithfield、Presler、 Cedar?Mill等几个架构。其中65nm的Presler、Cedar?Mill,将是NetBurst最后的版本。                               
  因为有了北木成功的经验,人们对Prescott抱有很高的期望。但是 P4?E系列的表现却令人大跌眼镜。虽然有更大的L1、L2缓存、更先进的90nm工艺、塞进了更多的晶体管、采用了更长的流水线,但同频率下的P4E系列与P4C系列比起来,性能提升十分有限,甚至有一定退步。

与性能有限的提升比起来,由于集成了更多的晶体管并运行在更高的频率,Prescott的发热以及功耗却有不小的提升。而在同一时间,AMD推出了新的K8架构——新的Athlon?64,事实求事的讲,在民用领域,Prescott系的Pentium?4与K8架构的Athlon?64相比,它的应用并不成功。            
  关于Prescott?Pentium?4与K8?Athlon?64的优劣,牵扯到了太多方面的原因,不是只拿NetBurst就能讲的清楚的。Pentium?4后期的不成功,其实不应将责任全部推给NetBurst。                                                   
        基于NetBurst微架构的所有CPU将于2007年底全部停产,Intel也基本不再继续对其进行开发。屈指算来,从2000年威廉的发布到07年底的停产,它陪伴我们将有7年的时间。这7年,NetBurst为我们带来了太多宝贵经验与教训,值得我们反思。这里将以Prescott为基础进行一些讨论,其中一些内容其实无关于NetBurst,但也是Pentium?4系列发展中遇到的问题。                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
  经常看到这样的说法:“Pentium?4高频长流水线设计,使得它的效率下降,发热和功耗上升,数据命中率下降,错误率提高,流水线清空带来的损失巨大,性能损失严重。”其实只要对CPU的运算原理有所了解,就该知道把风马牛不相及的几个要素拼凑在一起的这个说法是多么的荒唐了。                                                                                                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
  作为一款通用型处理器,无论它架构如何,它的最终目的都是为了运行各种不同的软件。而任务的处理就不得不提到他所处的环境与条件,要讨论这个,不得不先从我们的系统环境说起。                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
  如果说我们现在绝大多数人所使用的X86系统、指令集是一个很是落后的古老产物,是上个世纪才用的东西,估计会有很多人难以接受。但事实就是如此。X86原则上是逐周期,逐指令进行操作,一个周期执行一条指令。可我们的需求不止是每周期一个指令,为此,单指令多数据流——SIMD诞生了。现在我们日常用的民用级CPU一般每个周期能够执行3~4条指令,这对于民用级的产品来说已经够用了。SIMD其实不难理解,例如SSE2、SSE3、3D?NOW!这些都属于SIMD                                                                                                                                                              
2007-9-14 16:44   回复此发言 ?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
4        回复:NetBurst也是好架构!                                            
        在我们的日常运算里,用的最多的无非是两种:整数运算与浮点运算。最早时的CPU其实几乎不具备浮点运算能力,但Pentium?MMX改变了这个现状,在加入了一个名为MMX的SIMD指令集后,CPU开始具备了初级的浮点运算能力,其实上面提到的几个指令集,都与浮点运算有关。   

至于整数与浮点的具体作用,举几个简单的例子,整数运算应用比较多的地方,例如科学计算,浮点运算应用的比较多的地方,例如视频处理,游戏等。在这里再提一下X87—整数浮点转换指令。估计这是个让Pentium?4刻骨铭心的名字。

  那么,以具体的型号来做下对比,再说 Prescott?Pentium?4与K8?Athlon?64的性能。就单核的同档次产品来讲,Pentium?4与Athlon?64的表现有着很大差异。如果是专业设计,3DMAX或者是播放高码率HDTV之类的应用,Pentium?4要领先对手一大截,而如果是游戏,Athlon?64的表现却可以让Pentium?4很郁闷。经常见到有人拿“长流水线高频率在大数据量,多任务下有优势,而游戏讲究效率。”来解释。可是仔细想想,3DMAX可以轻载,要调动到大数据量大高要求的游戏也不少,似乎这样的解释是毫无道理的。         
  业界内有一个大的趋势,那就是加强整数运算,弱化浮点运算。Pentium4的设计实际上遵从了这个趋势,强化X86,弱化X87。但就游戏来讲,对浮点运算依旧有着较高的需求。                                      
  仔细看一下Pentium?4与Athlon?64的设计,Pentium?4拥有3个整数单元(其中有两个双倍速的快速执行引擎,等效于4个,近日的G80也采用了类似的技术。)2个浮点单元,串行的流水线设计。Athlon?64拥有3个整数单元,3个浮点单元,3发并行的流水线设计。                                   
  就SIMD来说,Intel强调整数运算性能,但也推出了如SSE2、 SSE3这样的多媒体指令集(这两个指令集并非是单纯的浮点指令集,而是包含了整数与浮点)。而Athlon?64强化了X87性能,加强浮点运算能力(也许有人想提3D?NOW!实际上这已经是很老的东西了,在现在的应用里作用有限)。  

  从上面的比较中就可以看出造成两者性能差异的原因了,这似乎与超长流水线没有什么关系。Intel曾推出SSE2、SSE3指令集以求加强游戏性能,但结果却很不成功。                                                        
  既然谈到了软件,就不得不谈“软件优化”。再搬出工厂做比喻,一般为工厂做优化都会考虑什么呢?工厂有几个门,每个门多大,用什么运输,流水线怎么运行,每运行一次周期有多长,有多少工人,哪个工人拧螺丝快,哪个工人擦玻璃快......要为CPU优化是件复杂的任务。CPU架构也直接影响了对它的优化设计,但超长的流水线不一定会增加优化的难度。从本人的认识看来,Prcscott的架构十分烦琐复杂,甚至于有些怪异到难以理解,例如第11级与12级流水线间上行可以达到256bit,而下行就只有8bit。           
  这样的设计无疑为厂家为其优化增加了难度,降低了软件商的热情。这就是为什么很多对Pentium?4与Athlon?64都有深入优化的软件(包括游戏),P4的性能都不会输给对方。但是毕竟这么做的厂家并不多,Prcscott的不成功,软件是一个很重要的原因。                                             
  在X86继任者的问题上,Intel选择了IA64,而微软选择了X64。当初Intel宣称威廉是末代X86?CPU,显然没有预料到今日的X86-64,IA32(EM64T)。虽然至今我们都没有从“伪64位”技术中获得多少实质上的性能。 

                     
末期的Pentium?4的发热与功耗令人诟病,有很多人将它直接与长流水线的设计挂钩,认为长流水线是导致高热高能的原因。其实不然,发热,功耗与流水线设计没有任何直接关系。真正决定功耗和发热的主要是三个物理要素:集成的晶体管规模、晶体频率、制程工艺(电压)。其实要说明这个很简单,只要拿同制程,同频率、集成晶体管数目相近的Athlon?64与Pentium?4比较一下就可以很容易看的出来。在早期的威廉和北木核心时,Pentium?4的发热功耗其实都处于一个合理的范围里,长流水线的设计,只是提供了一个大的频率的伸缩空间而已。                                                                                                                  
在网上一直流传着“超长流水线清空带来的性能损失大幅降低Pentium?4性能”的说法。的确,这样的设计带来较高的延迟,每当错误发生清空流水线带来的损失也比较大,但是是否是因为这个原因造成了CPU的性能下降?这个问题有待商榷。                                                               
  其实从NetBurst设计初始,Intel就考虑到了这个问题,并且采用了多种设计去降低它所带来的影响。如乱序推测执行、高动态执行、缩短任务所需的指令、采用追踪缓存等。其实有很多都并非是NetBurst独有的。这里只简单的讲一下一级追踪缓存。                                                  
  通常来说,一级缓存包括一级数据缓存与一级指令缓存。其中指令缓存负责及时解码的工作。一级追踪缓存除了充当了指令缓存解码的工作外,还可以储存解码后的微指令(μOps)。这样可以减少重复运算,减轻CPU在高负荷时的解码压力。事实上,μOps的运用,并没有达到Intel当初预想的程度。  实际上,Pentium?4清空流水线的损失率并不高于 Athlon?64。虽然每个周期的损失Pentium?4要大,但是因为Pentium?4的周期短(频率高),所以在同一段时间内,两者的损失差距很小。其实要推翻这个说法很简单,PrCScott比NorthWood流水线长了10级,岂不是损失率要比NorthWood高很多?事实上,同频率的 Pentium?4C与Pentium?4E的损失率基本是相等的。         
  伴随着Pentium?4的发展,从NorthWood开始出现了“超线程”技术(Hyper-Threading,HT)。单纯从技术上来说,这虽然算不上革命,但也能算的上是大幅度的革新。不过它的出现纯属无奈,Pentium?4使用时往往有大量的闲置资源,效率不高。为了解决这个问题,Intel为Pentium?4添加了一段逻辑电路,使他可以模拟出另一个独立的核心来。虽然距离真正的双核心差距比较远,但是这种设计思路确实值得称赞。就它的应用来看,在软件的配合下,打开HT后CPU性能往往有30% 提升。但是在民用软件里很少有能用的到它的地方。此外有时打开HT反而性能会下降(这与追踪缓存不够大有关)。具体的内容,在这里就不多做介绍了。                                       
  NetBurst已经渐渐离我们远去,在相当长的一段时间内,我们将无法在桌面级民用市场看到类似的产品。尽管NetBurst末期的产品算不上成功,但是这并不妨碍他的设计思想即使在今日也称的上先进。CPU是一个多元的世界,硬件,软件,市场,每个因素都不能忽略。我们将怀念NetBurst的成功与教训,一起开拓明日的世界。                                                                                                                                                                                                                                                                                                                       
http://www.xue163.com/html/200863/396384_3.html                                                                                                                     

评 论
还没有网友评论,欢迎您第一个评论!
博 主
进入imjacob的首页
博客名称:雅克的一府
日志总数:514
评论数量:901
访问次数:1859650
建立时间:2006-11-23 20:52
导 航
公 告
Locations of visitors to this page 本博客主要用于个人学习与资料收藏。当然大家应该读了之后也能学到不少东西。其中大多数资料都是来自网络,我转载时尽可能地表明文章出处与原作者姓名,但由于很多资料经多人转载,已不清楚原作者信息与出处,所以未表明相关…
评 论
链 接

ARM+LINUX 嵌入式博客
http://blog.chinaunix.net/u1/58780/index.html

嵌入式软件
http://blog.csdn.net/embeddedsoft

诚诚恳恳做人踏踏实实编程
http://blog.sina.com.cn/u/1244756857 

和我风格相似的一个blog
http://blogger.org.cn/blog/m…