Cell体系结构的优缺点分析.docx
- 文档编号:28022302
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:25
- 大小:584.32KB
Cell体系结构的优缺点分析.docx
《Cell体系结构的优缺点分析.docx》由会员分享,可在线阅读,更多相关《Cell体系结构的优缺点分析.docx(25页珍藏版)》请在冰豆网上搜索。
Cell体系结构的优缺点分析
Cell体系结构总揽
作者:
作者均系同济大学软件学院2003级学生:
陈犇0331401班ben.sleeper@
朱小未0333435班tenery.xiaowei@
李娜0333242班jianjinshufish@
摘要:
本文分析了Cell结构提出的背景和所解决的问题;详细介绍了Cell内部各单元,并对Cell编程实现作简单介绍。
同时对Cell结构的优缺点进行了比较,总体介绍了Cell的应用情况和前景。
目录
一、引言3
二、Cell体系结构提出的背景3
2.1RISC指令集结构的优点3
2.2运算单元与存储单元的“距离”4
三、Cell内部结构介绍6
3.1Cell结构总揽6
3.2IBM公布的性能数据:
8
3.3Power处理单元(PPE)8
3.4协同处理单元(SPE)9
3.5SPELocalStores10
3.6TheEIBandSMF10
四、对Cell进行编程11
4.1Cell程序简介11
4.2将应用程序移植到Cell12
五、Cell体系结构的优缺点分析13
5.1采用LocalStore而非Cache13
5.2I/O设备的外移13
5.3动态功能单元组及资源保护机制14
5.4采用不带缓存的有序执行15
六、Cell的应用目标15
6.1多个Cell协同处理15
6.2多媒体、电子游戏16
6.3军事、医疗17
6.4从高端到低端的一系列计算系统体系结构17
七、结束语17
八、参考文献18
一、引言
由Sony,Toshiba和IBM(简称STI联盟)最初为PlayStation3设计的“Cell处理器”是一个高性能分布式体系结构处理器。
Cell包括硬件Cell和软件Cell。
硬件Cell采用多核技术,主要由一个PPE和8个SPE通过EIB总线联结构成,各个单元协作且并行地处理计算机任务;软件Cell包括数据和程序,它们被送往硬件Cell进行计算并返回结果。
Cell的每一个核都采用RISC指令集结构,而指令的动态调度,寄存器换名等都由软件实现,从而大大提高了硬件速度。
Cell处理器的影响不仅仅局限于游戏市场,而将遍布整个计算机工业界。
Cell在图形领域的优势是明显的:
3D图形所具有的巨大并行性以及可向量化和流水化处理的特征,而Cell中的多个SPE能对其进行大幅度加速;而数字信号处理中主要使用的FFT(快速傅立叶变换)算法也是一个高度可向量化的算法,Cell的向量化与高并行性将使Cell处理器成功地运用于DSP领域;除此之外,Cell处理器可有效运用于超级计算,服务器,流处理应用等多个领域。
然而,Cell处理器在发展过程中面临许多问题。
Cell处理器与有限主存的速度及性能之间的差距越来越大,主存成为Cell体系结构计算机整体性能提高的瓶颈;Cell采用RISC指令集结构,虽然提高硬件执行效率,但增加了编译器的负担;Cell处理机中多核的功耗和散热量也是Cell体系结构发展的一个制约因素;目前基于Cell体系结构的程序开发工具很少,Cell体系结构计算机对程序并发性和可向量化要求很高,程序难于编写,程序的可移值性和兼容性也存在问题。
本文第二部分分析了Cell体系结构从技术上产生的背景;接着第三部分介绍了Cell处理器内部各个部件的结构,在此基础上第四部分介绍了对Cell进行编程的概念;第五部分比较了Cell体系结构与其他体系结构的优缺点;第六部分简要介绍了Cell应用情况。
本文的目的在于对于Cell结构有一个总体的介绍,希望能对打算在Cell上进行开发的人员,和对Cell体系结构有兴趣、愿意研究的人们有所帮助。
二、Cell体系结构提出的背景
2.1RISC指令集结构的优点
Cell处理器中PPE和SPE都采用RISC指令集结构,下面从CISC的不足,针对CISC不足进行改进的RISC的优点以及RISC面临的问题三方面进行分析。
1.CISC的不足
复杂指令集计算机强化指令功能,实现软件功能向硬件功能转移,减少指令条数来提高计算机性能。
然而这一设计将使得指令的使用频率相差悬殊,指令没有得到充分利用,80%的指令只能在20%的运行时间里用到;指令集本身的复杂性也带来了计算机体系结构的复杂性,这不仅增加了研制时间和成本,也容易造成设计失误。
指令集中各条指令功能不均衡,执行时间不同,不利于采用计算机体系结构的相关技术来提高性能,许多指令需要复杂的操作,因而运行速度慢。
随着指令集系统复杂度的不断提高,指令集系统的实现越来越困难,甚至降低系统的效率。
2.RISC的优点
针对CISC指令集结构的不足,在20年代80年代RISC指令集结构发展了起来。
RISC指令集结构采用定量化设计计算机体系结构的方法,选取使用频率最高和最有用的指令,使每条指令的功能尽可能简单,并在一个机器周期内完成,指令长度均相同,只有Load指令和Store指令访问存储器,其他指令均在寄存器之间进行,以简单有效的方式支持高级语言,大大提高系统性能。
图2.1在过去近20年RISC性能统计图
3.RISC面临的问题
上图的发展趋势符合摩尔定律,即在价格不变的情况下,计算机芯片的运算能力每18个月提高1倍。
然而当指令集精简和高效到达一定程度之后,系统性能的提高将面临瓶颈,只靠改进指令集的设计来提高计算机性能的作用将越来越小;当时钟频率提高到一定程度后,成倍的投入并不会给厂商们带来相应的性能的改善和收入的提高;功耗和散热等都将影响单核处理器性能的改进。
在单核处理机的性能发展到极限时,多核处理器技术的出现解决了这一问题,并使得摩尔定律避免了失效。
2.2运算单元与存储单元的“距离”
Transmeta公司曾经设计过一款名为VLIWCrusoe的芯片。
该款芯片的设计理念是尽可能的简化芯片的构造,把指令的动态调度,寄存器换名,分支预测等复杂的事情交给软件去做,从而提高硬件的运行速度。
然而,这种设想没有得到成功。
原因在于,把处理器的复杂性转移到软件上,意味着把复杂性放到了主存里。
这样,就在CPU和主存间的鸿沟进一步扩大,增加了延时。
图2.2CPU发展的三个阶段
上图展示了CPU发展的三个阶段。
第一个阶段,指令被静态调度,此时还没有指令窗口的概念(InstructionWindow);第二个阶段,处理单元的数目得到提高(比如有多个整数和浮点运算单元等)。
Cache的大小也得到增加,因而有更多的指令和数据可以存在Cache中。
此时,指令窗口技术引入。
指令得以在指令窗口中被重新调度,再输出给不同的处理单元并行地处理;第三个阶段,处理单元的数量也得到了一定增加(比如加入向量处理单元),流水线深度也得到增加。
这些变化导致了在每个时钟周期,有更多的"执行空间"(executionslots)需要填补;也就是说需要找到更多的,可以并行执行的指令。
因而控制逻辑里的工作量就增加了很多。
图2.3CPU数量的增加,带来的CPU与主存间距离的增大
图2.4传统CPU内部,执行单元与Cache距离很大
从发展的趋势来看。
运算单元的增加,会导致储存单元与运算单元的距离越来越远。
从大的方面来看,CPU数量的增加,会导致主存与CPU之间的距离的增加(图2.3);从小的方面来看(如同上面所提到的),CPU中处理单元单元的增加,会使Cache与处理单元间(ALU等)的距离越来越远(图2.4)。
这里,"更远"的距离,意味着更大的延迟。
而Cell体系结构较之Crusoe芯片能够成功的关键在于Cell体系结构重新运用了RISC的思想,采用了多核技术以及Localstore技术,扔掉了controllogic的负担,换来了更宽的处理单元以及更多的和处理单元靠得更近的存储单元。
与将所有复杂的控制交给编译器(普通的RISC芯片中就如此)所不同的是,编译器、程序员、优秀的调度软件和一个generalpurpose的CPU(PPE)一起承担了指令调度和资源分配等controllogic以前做的事情。
三、Cell内部结构介绍
3.1Cell结构总揽
一个单独的Cell芯片由下面这些部分组成(下文中均使用英文简写):
∙1个Power处理器单元(ProcessorElement(PPE))
∙8个协同处理器单元(SynergisticProcessorElements(SPEs))
∙单元相互连接总线(ElementInterconnectBus(EIB))
∙2个RambusXDR内存控制器
∙RambusFlexIO接口
其中,按照不同的分类,可以将SPE分解成SXU、LS(LocalStore)、SMF或者SPU和SMF。
具体结构如下图:
图3.1
图3.2
3.2IBM公布的性能数据:
∙时钟频率Observedclockspeed:
>4GHz
∙峰值性能(单精度):
>256GFlops
∙峰值性能(双精度):
>26GFlops
∙每个SPU的Localstorage的容量:
256KB
∙面积:
221mm²
∙采用90nm绝缘体硅技术(SilicononInsulator)
∙总晶体管数:
234M
为了进一步说明Cell的结构,接下来将单独对每一个单元进行介绍
3.3Power处理单元(PPE)
PPE是一个64位的“Power架构”的处理器。
IBM一直用“Power架构”指代其PowerPC和POWER处理器。
这种类型的处理器没有运用在PC里,但使用在Apple的Macintosh系统中(型号G5)。
PPE可以运行PowerPC和POWER处理器的二进制代码。
虽然PPE使用PowerPC的指令集,但其设计并是全新的。
也就是说,PPE不是基于现行的970/G5或POWER处理器的设计。
PPE拥有完全不同的体系结构,因此把PPE的时钟频率与现行芯片作比较是没有意义的。
PPE包含了一个64位的、多线程,指令双流出、顺序执行的Power架构的处理器和两级on-chipcache。
这个cache保护了系统全局的数据一致性;PPE还能支持VMX(VectorMultimediaeXtensions)指令集(也被称作AltiVec,类似于Intel的SSE指令),对多媒体应用程序进行提速。
VMX通过使用VMXSIMD单元来实现。
与流行的处理器结构不同,PPE类似于传统的RISC风格,其体系结构相对简单。
大多数流行的微处理器都专注于使用大量的硅元件,以使指令能够乱序执行,以提高指令的并行性。
这样的设计被广泛采用,但会添加大量的电路,消耗大量的电量。
而PPE不同,IBM将其设计得非常简单,耗电量也比PowerPC小,甚至是在运行在比PowerPC更高的频率上。
然而这样的设计带来了隐患:
当运行负担很大的程序时,PPE的性能可能飘忽不定。
对于结构简单的CPU,好的编译器非常重要。
因为硬件不再对指令进行调度,所以编译器需要做很多本来硬件做的调度工作。
PPE中的一些技术源自IBM的高端POWER系列CPU,比如PPE同POWER5一样,有能力同时运行多个线程:
当一个线程因等待数据而阻塞时,另一个线程的指令得以流出,这样使指令单元尽可能的繁忙(类似于Intel的超线程技术)。
IBM的hypervisor技术还能够让Cell同时运行多个操作系统。
根据IBM的说法,Cell可以在运行一个普通操作系统的同时,运行一个实时的操作系统,两个系统都能正常工作。
3.4协同处理单元(SPE)
图3.3
Cell的计算能力主要来自于8个SPE。
每个SPE是一个向量处理器,其行为相对独立。
每个SPE运行在4GHz频率上,拥有128×128位的寄存器,4个浮点运算单元(单精度),4个整数运算单元。
SPE还拥有一个256KBytes的LocalStore,以此来取代Cache。
另外还具有与全局数据保持一致性的DMA控制器。
SPE的组成单元和每一部分的带宽见上图。
附:
峰值运算性能的计算方法
对每个SPE:
如果以Multiply-Adds来计算,一个时钟周期能执行两个运算,则4GHz×4×2=32GFLOPS
整个Cell:
32×8SPEs=256GFLOPS
几乎所有SPE的指令都是被设计用来以SIMD的形式在128位的数据上进行操作。
128位的数据可以由2个64位双精度浮点数或长整数、4个32位单精度浮点数或整数、8个16位short、或16个8位的char来组成。
128位的操作数被保存在一个寄存器中。
指令最多可以有三个操作数并产生一个结果。
每个寄存器文件有6个读和2个写端口。
访存指令同样对128位的数据进行操作,但是数据的地址必须是16bytes的整数倍。
因此,当使用向量取/存指令访问内存的时候,地址中低4位直接被忽略掉。
为了让取/存单个数值(比如char和integer类型的数)更加容易,SPE还可以支持基于128位寄存器的单个数值的提取和整合(extract/merge)操作。
SPE可以最多同时将2条指令分配到7个运算单元中。
这7个运算单元被分为“奇”和“偶”两个指令管道。
指令顺序的流出,并被发射到其对应的奇或偶管道。
流出逻辑可以检测到不相关的指令,并将两条一起流出。
不相关需要满足的条件是:
第一条指令必须来自一个“奇”字地址并使用“奇”管道,而第二条指令来自一个“偶”字地址并使用“偶”管道。
如果条件不满足,两条指令将被顺序执行。
SPE的分支结构允许使用一条分支暗示指令来覆盖原来默认的分支预测策略。
分支暗示指令还能从分支目标处预取最多32条指令,因此如果分支暗示成功,则没有分支带来的损失。
指令取缓冲中的一个专门用于分支暗示机制。
此外,还有使用位选择指令来消除短分支的额外支持。
如同PPE一样,SPE的指令级并行性很有限。
这意味着SPE的编译器非常重要。
但SPE的128个寄存器提供了大量空间,使得编译器能够对程序中的循环进行多次展开。
同时,其他的一些技术也消除了对硬件乱序执行的需要。
SPE的指令集于VMX类似,但并不一致。
SPE中移去了部分指令,并添加了一些新指令。
比如添加了64位浮点数操作和程序流程控制操作,同时移去了整数的saturationrounding操作。
3.5SPELocalStores
SPE与和传统CPU的一个很大的不同在于,SPE没有Cache,而是采用LocalStore。
每一个SPE都有一个256Kbyte的LocalStore。
LocalStore虽然与Cache一样,是在芯片里的存储部件(on-chipmemory),但他们的行为却相差很大。
LocalStore的效率和L2Cache差不多。
由于没有使用Cache的机制,复杂性得以大幅降低,处理的速度得到提高。
同时,由于SPE的LocalStore之间没有一致性机制,使得整体的设计更加得简单。
此外,由于没有一致性机制,Cell中SPE的数量可以方便的增加或减少。
也就意味着Cell结构的可缩放性(Scaling)比使用Cache的传统系统要好。
当然,简单的硬件设计对编译器的要求就更高一些。
后面会详细讨论这个问题。
SPE的LocalStore支持完全流水化的16-byte宽的访问(对于访存指令)和128-byte宽的访问(对于取指令和DMA操作)。
由于LocalStore只有一个端口,取指令操作、DMA和访存指令都要竞争地使用这个端口。
取指令操作只发生在LocalStore空闲的时候;最多一次取3.5条指令放在指令缓冲中,以留出更多的访问空闲时间。
LocalStore能够以最小1Kb(最大16Kb)的块大小与主存进行数据交换。
LocalStore与寄存器的数据交换非常快。
每一时钟周期,每一个寄存器能够与LocalStore进行16Bytes(128bits)的数据交换(每秒64Gigabytes)。
Cache能够提供更高的数据传输率,但使用Cache不能保证将实际的数据传输率保持在一个较高的水平,仅仅在某一小段时间里能够维持高数据传输率。
这是由Cache的机制所决定的。
争夺总线问题:
SPE的数据需要与主存进行交换,同时SPE的寄存器也需要与LocalStore间进行数据交换。
这就导致了潜在的冲突。
为了缓解这个问题,LocalStore与外部数据的交换被限制在1024bits每周期。
总结一下,SPE采用LocalStore的设计大幅度降低了硬件的复杂度,提高了数据传输速度和系统的可缩放性。
但对编译器的要求相对高一些。
3.6TheEIBandSMF
协同内存流控制器SMF(SynergisticMemoryFlowController)将SPU整合到Cell系统结构中。
SMF采用Power保护模式和地址转换模式,使得SPU拥有了Power架构核心提供的保护和地址转换的能力。
SMF控制器使SPU具有了数据传输和同步的能力,并实现了SPU与ElementInterconnectBus(EIB)的接口。
如果把整个Cell系统看成一个网络,那么EIB可以看作是这个网络的集线器。
SMF控制器同时实现了SPE与PPE单元间数据交换的接口。
SMF控制器负责执行SPU中LocalStorage与Cell系统内存间大量数据的交换,同时提供了高效的数据传输率。
因为数据的传输单元从计算单元中分离到制定的数据传输控制器中,所以Cell结构可以实现数据处理和数据传输的并行执行,同时能够支持高级的编程技巧,比如软件流水线和双缓冲。
同时,由于提供了异步的数据传输能力、PPE和SPE上的数据处理和数据传输的并行性,SMF对于程序员也很重要。
因为程序员不再需要直接对数据的处理和传输进行操作。
SMF主要是由DMA单元和MMU单元构成的。
LocalStore能够与DMA间以128bytes的块大小进行传输。
DMA控制器能够支持来自内部或外部的最多16个16Kbyte的并发的访问。
DMA控制器是全局内存地址空间的一部分;内部DMA的地址在放上总线之前,会被MMU转换成为全局的地址。
程序通过一个通道接口来与DMA单元进行交互,并可能初始化阻塞或非阻塞的访问。
四、对Cell进行编程
4.1Cell程序简介
前面已经对Cell的组成和基本的工作原理进行了介绍。
那怎样对Cell进行编程呢?
下面我们先通过一个例子来说明这个问题。
假设我们需要对一个很大的数组进行如下处理:
array[i]=i+1;
由于数组很大,我们希望把数组分成很多小的部分,并行的对每一部分进行操作。
由于Cell中有8个SPE,我们能够做到这一点。
以下说明在Cell中实现这一目标的步骤(下面的操作假设数组已经存在。
下面配有的C代码都不完整,仅为帮助理解。
但代码本身是取自PPE的main函数中的代码,可编译通过,不是伪代码):
∙PPE同时启动所有8个SPE,分配给它们制定的数组的一段;
/*创建一个SPE组,以实现SPE事件*/
gid=spe_create_group(SCHED_OTHER,0,1);
if(gid==NULL){
fprintf(stderr,“Failedspe_create_group(errno=%d)\n”,errno);
return-1;
}
/*察看是否有8个SPE可用,若可用SPE不足8个则直接退出*/
if(spe_group_max(gid)<8){
fprintf(stderr,“Systemdoesn’thaveeightworkingSPEs.I’mleaving.\n”);
return-1;
}
/*为每个SPE读取control_block结构体*/
/*controlblock包含了SPE需要的数据*/
/*当SPE开始执行自己的main()函数时*/
/*第一件事情都是通过DMA载入controlblock结构体*/
for(i=0;i<8;++i){
cb[i].chunk_size=….//每个数组元素的大小
cb[i].addrSB=….//需要由DMA填充的地址
……
}
/*向SPE分配任务*/
for(i=0;i<8;++i){
/*其中,dma_sample_spu指向SPE的代码*/
speid[i]=spe_create_thread(gid,&dma_sample_spu,(unsignedlonglong*)&cb[i],NULL,-1,0);if(speids[i]==NULL){
fprintf(stderr,“FAILED:
spe_create_thread”);
exit(3+i);
}
}
∙SPE使用DMA取到需要处理的数组的一段,对其中每个元素进行增一操作,并将结果通过DMA写回主存;
SPE有自己单独的代码,用于处理数组和通过DMA将数据写回。
这里略去
∙SPE完成任务后,向PPE发信号。
PPE响应该信号,并做相应处理。
/*在PPE的主程序中,有类似waitpid的操作*/
for(i=0;i<8;++i)spe_wait(speids[i],&status[i],0);
/*PPE开始做相应处理*/
如同上面所见,Cell使用C作为主要开发语言。
使用普通的线程同步机制来控制程序在不同核心上的执行。
与许多系统的编程不一样的是,Cell编程并不是建立在某个软件的抽象层上面(比如由高级语言实现的抽象层),Cell的编程模式是固定的。
也就是说,当你在为SPE编程的时候,就是在对SPE本身进行操作,而不是其他抽象层。
你是直接与硬件接触的。
为SPE编程的时候,你能使用的就是256K的LocalStroe和128个寄存器,一点不多,一点不少。
值得注意的是,由于少了中间的软件抽象层,对于运行不同操作系统的系统,只要CPU都是Cell,那么同样的代码能够在这些不同的系统上运行。
如同用硬件实现了一个类似Java的虚拟机。
4.2将应用程序移植到Cell
第一步是移植应用程序到Power架构,使其能够在PowerPC的指令集结构下工作。
第二步是找出程序中的哪些部分需要在SPE中运行。
SPE最适合于处理小而重复的任务,并且最好是很多程序都会用到的任务(代码段)。
有两种算法对于SPE来说不适合:
占空间很大的算法(编译后>100KB)或者会在许多内存小块间任意跳转的算法。
而可以向量化或者具有并行性的算法最适合于SPE。
第三步是在找出了SPE需要执行的代码以后,将其从剩余的代码中分离出来。
需要注意的是,分离出来的代码必须完全不与其他代码有关联。
这样才能被移至SPE。
第四步是让程序以标量的方式正确运行起来。
在最初的移植版本中,为了让程序先跑起来,SPE的代码采用标量处理(非向量)。
这样来使程序的同步和通讯机制先正常工作起来。
第五步是向量化处理。
一旦运行成功,则可以对SPE的代码进行向量化处理,并正确的使用SIMD单元。
第六步是优化。
完成了以上步骤后还不完全足够,为了更加充分的使用SPE,计算和数据流需要平衡。
此外,还可以进行其他的优化工作。
可以看出,将
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Cell 体系结构 优缺点 分析