标题: [转贴] 技术分析:Power6与安腾走上了同一条道
  本主题由 老农 于 2008-8-7 21:25 加入精华 
colijia
LU幼天使
Rank: 2


UID 107907
精华 1
积分 33
帖子 52
活跃指数 14
LU金币 154 个
LU金条 0 个
阅读权限 20
注册 2008-6-12
来自 石家庄
 
发表于 2008-8-6 12:48  资料  个人空间  短消息  加为好友  添加 colijia 为MSN好友 通过MSN和 colijia 交谈 QQ
技术分析:Power6与安腾走上了同一条道

您现在的位置: IT专家网 > 服务器子站 > X86服务器
技术分析:Power6与安腾走上了同一条道
作者: 沈建苗,  出处:计算机世界, 责任编辑: 邵海宏, 2007-07-19 00:00

为了提高时钟频率,power6这个特立独行的架构改乱序执行为有序执行,终于走上了回归路。

  从有序技术到乱序技术

  直到大约15年前,大多数CPU一次只能处理一条指令。那时,如果采用流水线设计,譬如摩托罗拉68040或者英特尔80486,那么可以同时在不同执行阶段处理不同的指令。

  到了1991年和1992年,出现了MIPS R4000、Alpha 21064和奔腾这些处理器,它们属于面向通用市场的第一批“超标量”处理器:每个CPU周期可以处理(读取、执行及退出)两条指令。

  后来,1995年出现了Alpha 21264,我们就有了每个周期能处理四条指令的第一个CPU,时钟频率达到300MHz,这个速度在当时十分惊人。Alpha21664在微处理器论坛上一亮相,就引来了台下观众的一片赞叹,其中包括英特尔和IBM的设计者,更不用说Sun SPARC的设计者了。遗憾的是,Alpha最后没有成功。

  不管怎样,这些厂商当时都采用了有条不紊的有序执行技术(In Order):程序指令在执行时,按顺序读取、执行及引退操作码,每次执行两条或者四条指令。

  现在,不同指令需要不同的执行资源,而且程序流程往往是这样:执行需要等资源被释放出来,或者指令依赖性(dependency)得到解决,才能继续执行下一条指令。更糟的是,每出现新一代CPU,就需要重新编译代码,针对新CPU进行优化,不然读/写指令之间很可能会出现太多气泡(bubble)即空闲时间,导致性能提升幅度不大,与竞争产品相比优势也不大。

  这时候,乱序执行(out of order execution)出场了。CPU硬件本身在读取指令后重新安排指令的执行顺序,根据现有资源情况,提供更多的执行单元、重新命名寄存器、处理好指令依赖性等等。所以,Pentium Pro和Alpha 21264之后的几乎所有新款CPU都是采用无序执行技术。

  在多数情况下,乱序执行可以加快芯片的运行速度,有时候加速明显。21264的速度就是21164的将近两倍,而Pentium Pro的速度也比奔腾快了一大截。经过重大改进的最新MIPS架构R10000也采用了乱序执行。

  从安腾到Power6

  乱序执行一直发展良好,直到后来英特尔推出了一种全新的技术。意义重大的安腾处理器拥有真正独一无二的引擎,并使用了重要的显式并行指令计算(EPIC)技术。先不说安腾处理器的超过100种的指令格式组合、庞大的慢速寄存器组等,它实际上重新采用了有序执行技术。所以,编译器不得不完成所有工作,以确保执行单元始终处于忙碌状态。除了浮点处理密集型应用外,要做到这一点并非易事,只要看看安腾系统的基准测试结果就会明白。

  在后续的发展中,安腾架构的这一做法从来没有变过。相反,Sun一度改用了富士通公司使用无序技术的SPARC64,而不是它自己的使用有序技术的UltraSPARC IV。其他的重要架构如x86则继续采用无序技术,使用了Core 2和K10等新引擎,并进一步改进了这种方案,以便充分利用每MHz。

  如果你出于某种原因需要AIX,那么Power的重要性就不言而喻了。Power4和Power5都是高速、但复杂的采用乱序技术的RISC处理器,它结合了四路超标量执行机制和非常高的系统带宽。不过,Power6却回到了有序技术时代。原因何在?

  一个答案就是,如果Power6的同步多线程效果好,那么对单一线程浪费执行资源就不用太担心:在这种情况下,只要同步运行两个线程就行。另外,为了进一步大幅提升性能,频率提高一倍、二级高速缓存增加一倍、缩短算术逻辑单元(ALU)的延迟等方面恐怕更关键。即使那样,浮点处理部件还会保留有一定的乱序执行功能——这是在通用处理器的浮点运算部分首次引入十进制浮点处理单元(FPU)。“同步双线程执行、负荷预测机制以及增强的数据和指令预取功能,提升了有序执行超标量核心的性能。”IBM是这么评价其新芯片的。

  Power5+的五路无序执行被Power6的七路有序执行所取代,但即使如此,也有几个地方需要注意:Power5+一个线程每个周期最多只有五条指令,而Power6一个线程增加了二条指令,这对计算型线程和内存搜寻型线程组合来说更有优势。Power5+更关注内部资源,而Power6在大部分时候等待内存,所以每个周期两次操作完全够了。那么性能方面有什么提升呢?看一下基准测试specfp2006,频率为2.2GHz的Power5+在这方面能达到14.9,当然是在经过改动的Power5机器上实现的;而频率为4.7GHz的Power6能达到22.3,时钟频率提高了一倍多,性能提升却不到一半。

顶部
colijia
LU幼天使
Rank: 2


UID 107907
精华 1
积分 33
帖子 52
活跃指数 14
LU金币 154 个
LU金条 0 个
阅读权限 20
注册 2008-6-12
来自 石家庄
 
发表于 2008-8-6 12:49  资料  个人空间  短消息  加为好友  添加 colijia 为MSN好友 通过MSN和 colijia 交谈 QQ
第二页

 所以,Power6的7.9亿个晶体管分布在尺寸比较大的341平方毫米上,超过了Barcelona/Agena的283平方毫米,仅比尺寸庞大的安腾小了一点,它确实大幅提升了性能,尽管没有了乱序技术。虽然高速缓存和内存带宽随着时钟频率的提高都水涨船高,但是仍然可以说,在时钟频率相同情况下,重新使用有序技术会在处理单线程任务时导致性能下降30%左右。

  为此,我们不得不等待更新的Power6系统以及下一版本AIX在编译器方面的进展,以减少这种性能损耗。不过对Power6来说,采用有序技术确实明显提升了处理器的性能。安腾同样采用了有序技术,但是至少到现在还没有看到明显的成效。x86恐怕再也不会出现有序技术。

  不过,处理器技术的发展一日千里,Power6设计者不会坐井观天。再过一段时间,英特尔公司的3.6GHz的Harpertown“Penryn”和AMD公司3GHz Barcelona处理器就会陆续面世,都会对IBM Power6构成重大挑战。IBM必须牢记: 对采用有序技术的这类处理器而言,随着每一代后续CPU的问世,在编译器方面需要做的工作更多。同时,并不是每个人都会有时间重新编译自己的应用程序。

顶部
johnny2010
技术专家
Rank: 14Rank: 14Rank: 14Rank: 14


UID 476
精华 14
积分 2398
帖子 4136
活跃指数 750
LU金币 2738 个
LU金条 12388 个
阅读权限 200
注册 2003-10-14
 
发表于 2008-8-6 13:02  资料  个人空间  短消息  加为好友 
你是不是觉得ibm设计chips的技术人员是傻瓜。没有得到ibm的一些核心芯片制造技术的支持,intel没有今天。amd年初的震荡,你是否知道。任何高新技术可靠性是最重要的东西,没有厂商能承受产品线出现重大失误。

[ 本帖最后由 johnny2010 于 2008-8-6 13:07 编辑 ]





顶部
skyping
LU天使
Rank: 4



UID 87226
精华 1
积分 549
帖子 1026
活跃指数 36
LU金币 916 个
LU金条 0 个
阅读权限 80
注册 2007-3-28
 
发表于 2008-8-6 13:09  资料  个人空间  短消息  加为好友  添加 skyping 为MSN好友 通过MSN和 skyping 交谈 QQ
很好的文章





雁过留声,人过留毛!
命由天定,运有自转!
顶部
colijia
LU幼天使
Rank: 2


UID 107907
精华 1
积分 33
帖子 52
活跃指数 14
LU金币 154 个
LU金条 0 个
阅读权限 20
注册 2008-6-12
来自 石家庄
 
发表于 2008-8-6 13:16  资料  个人空间  短消息  加为好友  添加 colijia 为MSN好友 通过MSN和 colijia 交谈 QQ
回复 #3 johnny2010 的帖子

呵呵,老大,我十分的佩服IBM的芯片设计人员,是从心底里佩服的.我又看了看这篇文章,你说的对,IBM在设计芯片的时候绝对不会这么大意的,IBM用这种指令处理技术肯定有IBM的用意的,而且可以这么说这个技术不是Power6的缺点,我刚开始的认为有点太不周密了. 我向你道歉.你也解开了我心理的一个疙瘩,一直以来我都以为这是Power 6的缺点呢.

顶部
yurual (拉风小鱼翅)
技术专家
Rank: 14Rank: 14Rank: 14Rank: 14


UID 36475
精华 2
积分 856
帖子 954
活跃指数 45
LU金币 2998 个
LU金条 0 个
阅读权限 200
注册 2005-11-14
来自 shanghai
 
发表于 2008-8-6 13:34  资料  个人空间  短消息  加为好友  QQ
看过这篇文章的全文,说着说着市场老大power成了孤家寡人
感觉像是hp sales写的枪文





Symmetrix
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
colijia
LU幼天使
Rank: 2


UID 107907
精华 1
积分 33
帖子 52
活跃指数 14
LU金币 154 个
LU金条 0 个
阅读权限 20
注册 2008-6-12
来自 石家庄
 
发表于 2008-8-6 15:11  资料  个人空间  短消息  加为好友  添加 colijia 为MSN好友 通过MSN和 colijia 交谈 QQ
回复 #6 yurual 的帖子

细看看,是有道理的,以后我就认准Power 了.呵呵.

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
daaxiang
LU幼天使
Rank: 2


UID 35123
精华 1
积分 141
帖子 230
活跃指数 32
LU金币 2391 个
LU金条 0 个
阅读权限 20
注册 2005-10-6
 
发表于 2008-8-6 15:20  资料  个人空间  短消息  加为好友 
学习了





*****************
  日×回×五×帖
*****************
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
shala
技术专家
Rank: 14Rank: 14Rank: 14Rank: 14


UID 19911
精华 5
积分 1233
帖子 2289
活跃指数 80
LU金币 1253 个
LU金条 37862 个
阅读权限 200
注册 2004-5-5
 
发表于 2008-8-6 15:21  资料  个人空间  短消息  加为好友 
说明了一点IBM在有序执行上有了重大突破





http://shala.unixblog.net
沙拉◎为TH而奋斗
http://shala.loveunix.cn
------------
大老婆唠唠叨叨,小老婆叽叽喳喳,情况却一声不吭....烦啊,二房的感觉遥遥无期。
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
lj_cd (蓝色竹叶)
LU天使
Rank: 4


UID 42317
精华 4
积分 757
帖子 1366
活跃指数 88
LU金币 1832 个
LU金条 0 个
阅读权限 80
注册 2006-3-13
来自 sz
 
发表于 2008-8-6 15:54  资料  个人空间  短消息  加为好友 
分久必合,合久必分。技术的发展总是忽左忽右,螺旋上升的。

顶部
orian (x40)
版主
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15



UID 18050
精华 27
积分 2550
帖子 4512
活跃指数 353
LU金币 5792 个
LU金条 251 个
阅读权限 210
注册 2004-4-14
来自 海上
 
发表于 2008-8-6 19:10  资料  个人空间  短消息  加为好友  添加 orian 为MSN好友 通过MSN和 orian 交谈
有序执行,乱序执行各有优缺点,有序,cpu简单,主频高,稳定性好;乱序,cpu相对复杂,主频做不上去,稳定性差

谁能在自己的道路上做好,都不错。有序和乱序,我觉得是延续risc, cisc之争





垃圾猪 Orian

mail&msn://ensighine(at)yahoo.com
请访问垃圾猪的垃圾堆:
http://ensighine.spaces.live.com/

文明的曙光
顶部
sinister
技术专家
Rank: 14Rank: 14Rank: 14Rank: 14


UID 36664
精华 14
积分 348
帖子 385
活跃指数 312
LU金币 2030 个
LU金条 0 个
阅读权限 200
注册 2005-11-17
 
发表于 2008-8-6 21:06  资料  个人空间  主页 短消息  加为好友  添加 sinister 为MSN好友 通过MSN和 sinister 交谈 QQ
乱序也分读/写,在 x86 这种体系下只有”读乱顺“,而没有”写乱序“,在 x86 下写是严格顺
序的。这也给在 x86 平台上做开发的人大大的提供了方便,此类工作都是 CPU 帮你避免了。
而在其他 RISC 平台上的开发就没那么幸运了,这些问题必须你来考虑。

顺/乱续执行这种问题,先不提及其他,即便是在面向编程人员时,要想一两句话说清楚都是
非常困难的。当然这里不包括那些纯粹的高级语言,不涉及底层等低级操作没有这些概念。
这里举几个简单的例子。首先看下编译器的乱序(姑且先这么叫),现代编译器通常会
充分利用该体系 CPU 的乱序功能来进行优化。在编程中定义一个变量时,如果不想让编译
器对其进行乱序优化可以使用 volatile 关键字。如: volatile int *p1; 这样则基本上可以保证
编译出的代码没有对其进行乱序处理。可以反汇编验证如下代码的区别。

int *p1;  
volatile int *p1 //以不同方式定义 p1;

int *p2;
......// 略掉一系列为 p1,p2 分配内存等操作。
*p1 = 1;
*p1 = 2;
*p2 = *p1;

但这仅是保证编译出来的代码不会乱序,并无法保证执行时的乱序。见如下代码:

typedef struct tag_barrier{
     int  n1;
     int  n2;
}barrier;

barrier mybarrier;
mybarrier.n1 = 0;
mybarrier.n2 = 1;
......
......

CPU 的乱序预测很可能会先执行 n2 = 1。然后再执行 n1 = 0; 如果你的代码是要根据前一
条指令的结果来决定后一条指令,那么这样编写就很有可能出现问题。不过要强调的是,
如果写成这样

mybarrier.n1 = 0;
mybarrier.n2 = mybarrier.n1;

那么 CPU 是的乱序执行是不会先执行后一条指令的。说白了就是在 CPU 看来两个不相关的
变量地址读/写会预测乱序执行。为了保证代码不乱序执行提出了一种叫做 "memory barrier"
内存屏障的概念。也就是在你的代码中要显示的加入一些函数来保证执行时的顺序。此类函
数最终是与体系相关的,在不同平台上所用的汇编指令不同。如 POWER PC AIX 上的
"memory barrier" 则是由 sync, eieio, lwsync 等指令实现的。

关于何时加,怎样加的问题,不是几个帖子能说清的,这里就不再继续了。





没有道德现象,只有现象的道德解释。
顶部
 



当前时区 GMT+8, 现在时间是 2008-12-1 22:23
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.061743 second(s), 7 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver