多核技术论文.docx
《多核技术论文.docx》由会员分享,可在线阅读,更多相关《多核技术论文.docx(17页珍藏版)》请在冰豆网上搜索。
多核技术论文
一、引言
多核已经不是什么新鲜词了,但到底什么叫多核,怎么实现多核,那种实现技术在特定的条件下更好呢?
本文就是从这三个方面出发来论述多核技术。
次序依次为第二部分介绍了多核技术的背景以及概况,第三部分论述具体的CMP及SMT的多核技术,第四部分则比较了多核技术的关系,并在文章最后介绍了该技术的发展趋势。
二、多核技术的介绍
2.1多核技术的产生
40多年前,Intel的创始人戈登摩尔先生根据计算机处理器发展的规律,总结出了至今在计算机硬件领域中非常著名的摩尔定律:
“电脑芯片上的晶体管的数量每18个月将翻一番”。
在芯片设计和制造工艺上,几乎到了极限,CPU的运算能力无法再通过增加晶体管的数量来提高了。
在这种情况之下,CPU的制造商必须要用新的方式来提高计算机的运算能力,于是就有IBM、Sun公司利用计算机理论的并行计算设计出了多核CPU。
2.2多核CPU
所谓“双核技术”,就是在处理器上拥有两个一样功能的处理器核心,即将两个物理处理器核心整合人一个内核中。
两个处理核心在共享芯片组存储界面的同时,可以完全独立地完成各自地工作,从而能在平衡功耗的基础上极大地提高CPU性能。
多核CPU,即单芯片多处理器(CMP)是指在一个芯片上集成多个微处理器核心,可以并行地执行程序代码,在不提升CPU工作频率的情况下,降低CPU的功耗,并获得很高的聚合性能
2.3多核的分类
根据芯片上集成的多个微处理器核心是否相同,多核CPU可分为同构和异构两种:
同构多核CPU大多数由通用的处理器组成,核心相同,核心间平等;异构多核CPU使用不同的核心组成,它们分为主处理器和协处理器。
通用多核CPU多数采用同构结构,多个处理器执行相同或者类似的任务。
同构原理简单,结构对称,硬件上较易实现;异构CPU通常含有一个主处理器和多个协处理器。
主处理器主要负责控制和管理,协处理器主要用来运算。
2.4当前具有代表性的多核CPU产品
第一个商用的多核CPU是2001年IBM推出的双核RISC处理器Power4。
2004年IBM又推出后继产品Power5,并在双核的基础上引入多线程技术。
同时,HP也推出多核CPU产品PA—RISC8800,SUN也发布双核产品UltraSPARCIV。
2005年,多核CPU得到全面发展,AMD迅速推出面向服务器、支持x86指令集的双核心Opteron处理器。
而Intel则推出面向桌面系统的双核CPU——PentiumD及PentiumExtremeEdition。
另外,IBM在超级计算机系统BlueGene/L中使用的CPU也是一种双核CPU,与索尼和东芝联合推出的Cell处理器具备多达9个核心。
2.5“分治法”战略
英特尔工程师们开发了多核芯片,使之满足“横向扩展”(而非“纵向扩充”)方法,从而提高性能。
该架构实现了“分治法”战略。
通过划分任务,线程应用能够充分利用多个执行内核,并可在特定的时间内执行更多任务。
多核处理器是单枚芯片(也称为“硅核”),能够直接插入单一的处理器插槽中,但操作系统会利用所有相关的资源,将它的每个执行内核作为分立的逻辑处理器。
通过在两个执行内核之间划分任务,多核处理器可在特定的时钟周期内执行更多任务。
多核架构能够使目前的软件更出色地运行,并创建一个促进未来的软件编写更趋完善的架构。
尽管认真的软件厂商还在探索全新的软件并发处理模式,但是,随着向多核处理器的移植,现有软件无需被修改就可支持多核平台。
操作系统专为充分利用多个处理器而设计,且无需修改就可运行。
为了充分利用多核技术,应用开发人员需要在程序设计中融入更多思路,但设计流程与目前对称多处理(SMP)系统的设计流程相同,并且现有的单线程应用也将继续运行。
现在,得益于线程技术的应用在多核处理器上运行时将显示出卓越的性能可扩充性。
此类软件包括多媒体应用(内容创建、编辑,以及本地和数据流回放)、工程和其他技术计算应用以及诸如应用服务器和数据库等中间层与后层服务器应用。
多核技术能够使服务器并行处理任务,而在以前,这可能需要使用多个处理器,多核系统更易于扩充,并且能够在更纤巧的外形中融入更强大的处理性能,这种外形所用的功耗更低、计算功耗产生的热量更少。
多核技术是处理器发展的必然,近20年来,推动微处理器性能不断提高的因素主要有两个:
半导体工艺技术的飞速进步和体系结构的不断发展。
半导体工艺技术的每一次进步都为微处理器体系结构的研究提出了新的问题,开辟了新的领域;体系结构的进展又在半导体工艺技术发展的基础上进一步提高了微处理器的性能。
这两个因素是相互影响,相互促进的。
一般说来,工艺和电路技术的发展使得处理器性能提高约20倍,体系结构的发展使得处理器性能提高约4倍,编译技术的发展使得处理器性能提高约1.4倍。
但是今天,这种规律性的东西却很难维持。
多核的出现是技术发展和应用需求的必然产物。
这主要基于以下事实:
晶体管时代即将到来
根据摩尔定律,微处理器的速度以及单片集成度每18个月就会翻一番。
经过多年的发展,目前通用微处理器的主频已经突破了4GHz,数据宽度也达到64位。
在制造工艺方面也同样以惊人的速度在发展,0.13um工艺的微处理器已经批量生产,90nm工艺以下的下一代微处理器也已问世。
照此下去,到2010年左右,芯片上集成的晶体管数目将超过10亿个。
因此,体系结构的研究又遇到新的问题:
如何有效地利用数目众多的晶体管?
国际上针对这个问题的研究方兴未艾。
多核通过在一个芯片上集成多个简单的处理器核充分利用这些晶体管资源,发挥其最大的能效。
全局连线延迟
随着VLSI工艺技术的发展,晶体管特征尺寸不断缩小,使得晶体管门延迟不断减少,但互连线延迟却不断变大。
当芯片的制造工艺达到0.18微米甚至更小时,线延迟已经超过门延迟,成为限制电路性能提高的主要因素。
在这种情况下,由于CMP(单芯片多处理器)的分布式结构中全局信号较少,与集中式结构的超标量处理器结构相比,在克服线延迟影响方面更具优势。
符合Pollack规则
按照Pollack规则,我们知道处理器性能的提升与其复杂性的平方根成正比。
如果一个处理器的硬件逻辑提高一倍,至多能提高性能40%,而如果采用两个简单的处理器构成一个相同硬件规模的双核处理器,则可以获得70%~80%的性能提升。
同时在面积上也同比缩小。
能耗不断增长
随着工艺技术的发展和芯片复杂性的增加,芯片的发热现象日益突出。
多核处理器里单个核的速度较慢,处理器消耗较少的能量,产生较少的热量。
同时,原来单核处理器里增加的晶体管可用于增加多核处理器的核。
在满足性能要求的基础上,多核处理器通过关闭(或降频)一些处理器等低功耗技术,可以有效地降低能耗。
设计成本的考虑
随着处理器结构复杂性的不断提高,和人力成本的不断攀升,设计成本随时间呈线性甚至超线性的增长。
多核处理器通过处理器IP等的复用,可以极大降低设计的成本。
同时模块的验证成本也显著下降。
体系结构发展的必然
超标量(Superscalar)结构和超长指令字(VLIW)结构在目前的高性能微处理器中被广泛采用。
但是它们的发展都遇到了难以逾越的障碍。
Superscalar结构使用多个功能部件同时执行多条指令,实现指令级的并行(Instruction-LevelParallelism,ILP)。
但其控制逻辑复杂,实现困难,研究表明,Superscalar结构的ILP一般不超过8。
VLIW结构使用多个相同功能部件执行一条超长的指令,但也有两大问题:
编译技术支持和二进制兼容问题。
未来的主流应用需要处理器具备同时执行更多条指令的能力,但是从单一线程中已经不太可能提取更多的并行性,主要有以下两个方面的原因:
一是不断增加的芯片面积提高了生产成本;二是设计和验证所花费的时间变得更长。
在目前的处理器结构上,更复杂化的设计也只能得到有限的性能提高。
对单一控制线程的依赖限制了多数应用可提取的并行性,而主流商业应用,如在线数据库事务处理(OnlineDatabaseTransaction)与网络服务(如Web服务器)等,一般都具有较高的线程级并行性(TLP,ThreadLevelParallelism)。
为此,研究人员提出了两种新型体系结构:
单芯片多处理器(CMP)与同时多线程处理器(SimultaneousMultithreading,SMT),这两种体系结构可以充分利用这些应用的指令级并行性和线程级并行性,从而显著提高了这些应用的性能。
2.6多线程技术
CPU生产商为了提高CPU的性能,通常做法是提高CPU的时钟频率和增加缓存容量。
不过目前CPU的频率越来越快,如果再通过提升CPU频率和增加缓存的方法来提高性能,往往会受到制造工艺上的限制以及成本过高的制约。
尽管提高CPU的时钟频率和增加缓存容量后的确可以改善性能,但这样的CPU性能提高在技术上存在较大的难度。
实际上在应用中基于很多原因,CPU的执行单元都没有被充分使用。
如果CPU不能正常读取数据(总线/内存的瓶颈),其执行单元利用率会明显下降。
另外就是目前大多数执行线程缺乏ILP(Instruction-LevelParallelism,多种指令同时执行)支持。
这些都造成了目前CPU的性能没有得到全部的发挥。
因此,Intel则采用另一个思路去提高CPU的性能,让CPU可以同时执行多重线程,就能够让CPU发挥更大效率,即所谓“超线程(Hyper-Threading,简称“HT”)”技术。
超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行效率。
采用超线程即是可在同一时间里,应用程序可以使用芯片的不同部分。
虽然单线程芯片每秒钟能够处理成千上万条指令,但是在任一时刻只能够对一条指令进行操作。
而超线程技术可以使芯片同时进行多线程处理,使芯片性能得到提升。
超线程技术是在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU一样在同一时间执行两个线程,P4处理器需要多加入一个LogicalCPUPointer(逻辑处理单元)。
因此新一代的P4HT的die的面积比以往的P4增大了5%。
而其余部分如ALU(整数运算单元)、FPU(浮点运算单元)、L2Cache(二级缓存)则保持不变,这些部分是被分享的。
虽然采用超线程技术能同时执行两个线程,但它并不像两个真正的CPU那样,每各CPU都具有独立的资源。
当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。
因此超线程的性能并不等于两颗CPU的性能。
英特尔P4超线程有两个运行模式,SingleTaskMode(单任务模式)及MultiTaskMode(多任务模式),当程序不支持Multi-Processing(多处理器作业)时,系统会停止其中一个逻辑CPU的运行,把资源集中于单个逻辑CPU中,让单线程程序不会因其中一个逻辑CPU闲置而减低性能,但由于被停止运行的逻辑CPU还是会等待工作,占用一定的资源,因此Hyper-ThreadingCPU运行SingleTaskMode程序模式时,有可能达不到不带超线程功能的CPU性能,但性能差距不会太大。
也就是说,当运行单线程运用软件时,超线程技术甚至会降低系统性能,尤其在多线程操作系统运行单线程软件时容易出现此问题。
需要注意的是,含有超线程技术的CPU需要芯片组、软件支持,才能比较理想的发挥该项技术的优势。
目前支持超线程技术的芯片组包括如:
英特尔i845GE、PE及矽统iSR658RDRAM、SiS645DX、SiS651可直接支持超线程;英特尔i845E、i850E通过升级BIOS后可支持;威盛P4X400、P4X400A可支持,但未获得正式授权。
操作系统如:
MicrosoftWindowsXP、MicrosoftWindows2003,Linuxkernel2.4.x以后的版本也支持超线程技术。
三、CMP与SMT介绍
3.1单芯片多处理器(CMP)
3.1.1CMP单芯片多核心处理器介绍
CMP是指在一个芯片上集成多个微处理器核心,从实质上说,每个微处理器都是一个相对简单的单线程微处理器,而且这多个核心间联系非常紧密,甚至共享L1、L2和L3等。
其核间通过高速总线连接在一起。
CMP通常可分为同构CMP和异构CMP,其判别标准是根据。
芯片上集成的多个微处理器核心是否相同。
同构CMP大多数由通用的处理器组成,多个处理器执行相同或者类似的任务。
异构CMP除含有通用处理器作为控制、通用计算之外,多集成DSP、ASIC、媒体处理器、VLIW处理器等针对特定的应用提高计算的性能。
基于X86技术的多核处理器多采用类似技术,其中AMDOpteron处理器在设计上与传统的RISC处理器设计较为接近。
Intel产品由于是从单路处理器发展而来,在多路产品中与上述结构差别较大,但在设计上也引用了不少类似技术。
CMP的结构可根据微处理器在存储层次上互连分为三类:
共享一级Cache的CMP,共享二级Cache的CMP以及共享主存的CMP。
通常,CMP采用共享二级Cache的CMP结构,即每个处理器核心拥有私有的一级Cache,且所有处理器核心共享二级Cache。
由于CMP采用单线程微处理器作为处理器核心,因此,CMP在实际使用中体现出了很多优点。
首先,微处理器厂商一般采用现有的成熟单核处理器作为处理器核心,从而可缩短设计和验证周期,节省研发成本。
其次,控制逻辑简单,扩展性好,易于实现。
再次,通过动态调节电压/频率、负载优化分布等,可有效降低CMP功耗。
最后,CMP采用共享Cache或者内存的方式,多线程的通信延迟较低。
相比于SMT,CMP的最大优势体现在模块化设计的简洁性。
不光复制简单设计非常容易,指令调度也更加简单,同时也不存在SMT中多个线程对共享资源的争用,因此当应用的线程级并行性较高时,CMP性能一般要优于SMT。
此外在设计上,更短的芯片连线使CMP比长导线集中式设计的SMT更容易提高芯片的运行频率,从而在一定程度上起到性能优化的效果。
3.1.2.CMP的关键技术
首先,体现在Cache设计。
随着半导体工艺的发展,CPU和主存储器之间的速度差距越来越大。
在CMP中,多个处理器核心对单一内存空间的共享使得这一矛盾更加突出,因此在设计中采用多级Cache来缓解这一矛盾;此外,Cache自身的体系结构设计也直接关系到系统整体性能。
很多CMP设计都采用了分布一级Cache,共享二级Cache和三级Cache的结构。
其次,核间通信机制也很重要。
CMP处理器由多个CPU核心组成,因此,每个CPU核间通信机制的优劣直接关系到CMP处理器的性能,高效的通信机制是CMP处理器高性能的重要保障。
目前比较主流的片上高效通信机制有两种,一种基于总线共享的Cache结构,以斯坦福大学的Hydra处理器为代表;一种基于片上的互连结构,以麻省理工学院的RAW处理器为代表。
总线共享Cache结构是指每个CPU内核拥有共享的二级或三级Cache,用于保存比较常用的数据,并通过连接核心的总线进行通信。
基于片上互连的结构是指每个CPU核心具有独立的处理单元和Cache,各个CPU核心通过交叉开关或片上网络等方式连接在一起。
此外,高性能系统总线接口设计、低功耗设计以及编译/运行时优化等因素也是十分重要的。
3.2.同步多线程处理器(SMT)
3.2.1.SMT同步多线程处理器介绍
同步多线程技术(SMT)是一种体系结构模型,其目的是在现有硬件条件下,通过提高计算能力来提高处理器的性能。
因此,同步多线程技术结合了多重启动处理器(超标量和VLIW)和多线程处理器的思想来增加并行度,进而提高性能。
多重启动处理器可以在一个周期内执行多条(2,4甚至8条)指令,而多线程和多处理器(SMP和CMP)结构可以同时或者在很少的延迟内执行来自不同线程的指令。
SMT结构中,不仅在一周期内启动多条指令,而且也能在同一周期内启动来自相互独立的线程(或上下文)的指令。
在理论上,这种改进运用了指令级并行性(ILP)和线程级并行性(TLP)技术来提高执行功能单元的效率。
3.2.2.同步多线程技术
同步多线程技术试图解决上面提到的两种浪费。
同步多线程技术通过两种途径来提高处理器的总体性能。
1)同步多线程技术允许处理器在一个周期内执行多个线程的指令而不需要切换上下文。
因为,我们可以在这种模型中,同时利用线程级并行性(TLP)和指令级并行性(ILP)。
我们可以在任何一个周期内,更有效地利用处理器的资源从而减少水平浪费。
2)理论上,同步多线程技术不会由于不同的处于激活状态的线程的结合而阻止指令的启动。
这意味着如果由于产生了高延迟的操作或资源冲突,而使得一个线程挂起,仅有一个线程处于激活状态,那该线程就可以使用所有可用的发射槽。
由于在这个线程中的指令没有被阻塞,结果垂直浪费就消除了。
一个基于SMT技术的处理器,每个周期都从所有线程中挑选指令,启动并执行更多的指令,这样能够更好的利用处理器资源。
而多重启动(超标量和VLIW)处理器能够在每个周期内执行多条指令,当单个时钟周期内指令级并行性很低时,这种处理器的效率是很低的。
多线程和多处理器结构减少了由于长延迟操作和资源冲突而产生的限制,但是也增加了开销(经济上的和规模上的开销),还未必能够十分有效的使用处理器资源。
SMT可以最有效的利用多重启动和多线程结构,而不必实质性的增加开销和晶体管数量。
DEC/Compaq的AlphaEV-8处理器就是利用SMT技术的典型机器。
EV-8的设计者之一JoelEmer说“它看上去像4个芯片,用起来像两个,而实际上只有一个,但它相比于一个非多线程的只增加了5%的晶体管。
”
调度(Scheduling)
超标量机上的动态调度对于SMT机的调度同样适用。
因此,寄存器重命名(registerrenaming)仍可以在SMT机上使用。
为了防止线程自身与线程之间发生寄存器名字冲突,线程相关的结构寄存器必须与硬件寄存器相对应。
取指(InstructionFetching)
由于SMT处理器上的指令可能来自不同的线程,大大增加了线程级并行性,以提高处理器性能。
有鉴于此(在任何一个周期内,有更多的指令可能被启动),取指单元必须能够有效的填满指令缓冲区以向处理器提供足够的指令,而且还必须具备动态调度的能力。
此外,由于可能在同一时刻存在多个线程同时运行,取指单元还必须知道哪个线程需要指令。
当取指单元无法在每个周期内为所有线程取得指令时,就必须在线程间作出选择,以确定给哪个线程优先提供指令。
这里将讨论两种取指模型。
一个就是单循环法(round-robin),每次为一个线程取指,循环于所有激活的线程之间。
另一个就是引用计数法(Icount),使用一个算法根据线程移动的速度,来确定谁的优先级最高。
最后,如果多线程要支持指令的同步请求,就可能需要增加额外的端口。
寄存器文件和程序计数器(RegisterFileandProgramCounter)
为了保持多线程的上下文,处理器必须将状态保存下来。
这样,SMT处理器需要很多的寄存器文件。
每个线程得到它自己的结构寄存器。
利用寄存器重命名,我们可以假设所需的硬件寄存器数量等于线程所需的结构寄存器乘以线程数再加上支持重命名的寄存器。
一个更大的硬件寄存器文件,通常就增加了处理器的复杂性,有时候也可能增加访问时间。
(结构寄存器)*(线程数)+重命名寄存器
除了复制和增加的寄存器文件所需的空间之外,SMT处理器还需要为每个线程增加分离的程序计数器。
管道(Pipeline)
指令管道不一定要进行实质性的改变来支持SMT。
但是,由于寄存器文件的增大,从寄存器重命名策略的角度看,可能需要管道为寄存器的读写增加额外的步骤。
分支预测(BranchPrediction)
分支预测和目标缓存需要一定的改进。
由于同时执行的上下文,其地址空间可能很大,分成的块数也越多。
至少在一种我所碰到的设计中,需要为分支目标缓存增加一个线程标识符。
另一种改进的方法是为每个线程复制整个结构,这个方法对于一个支持比较少的线程的处理器还是可行的,但是对于一个支持很多线程的处理器就太昂贵了。
Cache
处理器的cache是另一个可能发生资源竞争的部件。
超线程技术不仅要求能够同时访问数据和指令,对于带宽的需求也增加了。
这样,cache越小,就越容易发生冲突。
虽然在这里我们讨论了这个问题,但是这个问题常常由于在其他方面效率的增加而被忽略了。
在一些情况下,L1cache失效明显增加了(在并行工作负载下达到68%),但是L2cache能够处理大部分的请求,所以总体的性能受L1cache失效的影响不到10%。
四、多核技术:
横向扩展与纵向扩展比较
4.1AMD和Intel概念比较
目前流行的双核概念,主要是指基于X86开放架构的双核技术。
在这方面,起领导地位的厂商主要有AMD和Intel两家。
其中,两家的思路又有不同。
AMD将两个内核做在一个Die(晶元)上,通过直连架构连接起来,集成度更高。
AMD从一开始设计时就考虑到了对多核心的支持。
所有组件都直接连接到CPU,消除系统架构方面的挑战和瓶颈。
两个处理器核心直接连接到同一个内核上,核心之间以芯片速度通信,进一步降低了处理器之间的延迟。
Intel则是将放在不同Die(晶元)上的两个内核封装在一起,采用多个核心共享前端总线的方式,因此有人将Intel的方案称为“双芯”。
专家认为,AMD的架构对于更容易实现双核以至多核,Intel的架构会遇到多个内核争用总线资源的瓶颈问题。
从用户端的角度来看,AMD的方案能够使双核CPU的管脚、功耗等指标跟单核CPU保持一致,从单核升级到双核,不需要更换电源、芯片组、散热系统和主板,只需要刷新BIOS软件即可,这对于主板厂商、计算机厂商和最终用户的投资保护是非常有利的。
客户可以利用其现有基础设施,通过BIOS更改移植到基于双核心的系统。
4.2Intel和AMD的双核技术比较
4.2.1无法克服的功耗和发热量
现在的芯片都是在单晶硅大圆片上制成的,大面积的圆片本身也难免存在一些缺陷,生产中的流程有时候也会给硅晶体带来缺陷。
另外虽然工厂的清洁程度非常之高,但在生产过程中还是免不了带入一些杂质,互连层在制造中也会引入自己的缺陷形式。
这样大规模的芯片很难保证全无任何缺陷。
现在半导体进入90纳米以下的工艺,缺陷和杂质带来的影响就更为普遍,晶体管的尺寸已经和某些缺陷或杂质的尺寸在一个量级,甚至晶体管尺寸更小。
一般来说,非致命的缺陷会造成电路性能下降,为弥补缺陷带来的损失,就需要给电路更高的电压和更大的电流,许多缺陷在降低晶体管性能的同时还会增加晶体管的功耗,以前CMOS数字电路的主要功耗是工作时的动态功耗,但到了90nm工艺以后,情况发生了很大变化,许多原来基本可以忽略不计的功耗因素现在都占据了较大的比重,例如电路互连损耗,泄漏损耗。
其中,泄漏损耗的影响急剧增加。
这就是为什么采用0.09微米工艺之后,各种处理器的发热量和功耗还是一路呈攀升趋势的原因,高频的Prescott处理器功耗将近100W,要知道,一个可以把焊锡快速融化的电烙铁也不过50W左右,因此,高功耗和吓人的发热量成为CPU继续向高频挺进的一大障碍,当时就有很多人预言,4GHz的处理器诞生之后,大家将可以通过CPU散热片来煮鸡蛋。
4.2.2高频之外的解决方案
既然无法通过继续提升频率来实现更高的频率,那么用户对产品性能提