第1章 绪论
1.1 多核处理器体系结构简介
1.1.1 多核处理器
随着微电子工艺技术沿摩尔定律不断发展,当今集成电路制作工艺使处理器芯片集成的晶体管越来越多,晶体管尺寸越来越小,同时处理器的时钟频率也在不断提升。通过采用更高的时钟频率,处理器流水线延迟被有效缩短,这提高了指令的执行速度,从而提高处理器每周期完成指令数(instruction per cycle,IPC),进而获得系统性能的提升。工艺线宽进入深亚微米时代后,处理器频率的增长到达了一个瓶颈,这使得处理器设计者需要重新审视通过提升时钟频率来提高指令执行速度的传统思路,单核体系结构的发展可以通过开发指令并行度(instruction-level parallelism,ILP)推动处理器性能整体增长,而不依赖工艺更新,例如超标量、乱序发射和猜测执行等技术的提出一度缓解了处理器性能增长需求的压力。指令级并行度本身受限于数据依赖、控制依赖以及数据总线带宽,发展逐渐遇到瓶颈,无法从发射宽度、流水线数目的提升中获得较大的性能增长空间。
相比较于传统的并行处理技术,当前先进的半导体制造工艺已经允许在一个芯片上集成众多处理器核,这一处理器设计架构即为多核处理器(multi-core processor)。该架构的发展使得开发更粗粒度的并行机制如线程级并行(thread level parallelism,TLP)成为可能,并且该架构具备良好的可扩展性,可满足不同应用的需求。
根据处理器核的选取方式,多核处理器可以分为“同构多核处理器”和“异构多核处理器”两种,同构多核处理器在一块芯片中集成了多个相同架构与设计参数的处理器核,获得对称的性能,一项任务可以任意分配给某个核处理,有很好的易用性与性能可预测性,但缺点是不能很好地适应各类应用的特性需求。大多数商用通用处理器采用了同构多核的组织形式,如IBM公司的Power4服务器处理器,集成了两个共享二级缓存的处理器核。Tilera公司推出的TILE64[1],集成了64个支持MIPS指令集的处理器核,构成8×8的处理器阵列。Sun公司的Niagara T2[2]以及传统的通用处理器公司Intel与AMD所推出的Xeon、Core Duo、Core i3/i5/i7、Opteron、Athlon、Bulldozer、Bobcat、Phenom等处理器系列都采用同构的组织形式。
相比同构多核处理器,异构多核处理器通过集成不同结构的处理器核心来提升运算效率,这是由于异构多核处理器能够满足不同特性任务的需求,从而可以合理划分与调度任务达到发挥不同类型处理器核的专用特点。典型的异构多核处理器有IBM公司、SONY公司和TOSHIBA公司联合开发的Cell BE处理器,该处理器集成了Power通用处理器以及多个计算处理器核SPE,拥有很好的性能功耗比[3]。
自1989年Intel公司预测多核处理器将在21世纪之初成为通用计算机市场主流以来,处理器核的规模也在不断增长,2000年之初IBM公司推出的第一款商用双核处理器Power4,Intel公司随后推出了双核处理器“酷睿”(Core),AMD公司也推出的四核处理器AMD Phenom II-X4。随着云计算和数据中心应用的发展,处理器逐渐发展到15核(Intel Xeon E7-V2)、48核(Intel SCC)甚至64核(Tilera TILE64),而且多核处理器被运用到多个应用领域,嵌入式平台、消费电子以及移动平台也逐渐采用多核处理器,如高通公司的snapdragon系列处理器。几种商用同构多核处理器如图1-1所示。核数目的增长,一方面使得处理器计算能力与吞吐量得到不断提升,另一方面给计算机系统的数据供应能力和互连带来了严峻挑战。
图1.1 几种商用同构多核处理器
1.1.2 多核处理器的片上互连网络
根据集成的核数不同,多核处理器可以分为“总线式/交叉开关互连式”,以及“片上网络(networks-on-chip,NoC)互连式”两大类。由于集成的处理器核数量较少,*初的多核处理器典型特点为总线和交叉开关互连,每个核的功能较为强大,类似于传统的单核处理器,总线被不同的处理器核交替使用,达到访问共享存储器的目的。每个处理器通过总线广播的方式发送消息,也通过总线侦听来接收其他处理器发来的消息,这种存储访问结构自然支持了内存空间在各个处理器核之间的共享以及基于总线侦听的缓存一致性协议。这种方法设计简单,可以重用复杂的处理器设计,并且借用板级总线设计协议,是多核处理器发展初级阶段的主流互连方式,例如Intel公司的第一代四核处理器Core-2-Q6600由两颗E6600双核处理器封装在一起而成,再如Sun公司在2007年推出的八核处理器Niagara 2,其互连方式为交叉开关式互连。
总线式互连的劣势来自于总线或交叉开关本身带来的性能瓶颈,这个瓶颈可以体现在系统性能和功耗两个方面。从性能上来说,总线或交叉开关仍旧依赖全局金属互连线,其性能无法随着半导体技术的提高而进步,这种全局性的互连要求所有的通信均须先汇集到总线上然后再发送出去,电信号需要给长达整个处理器硅片边长的金属线充电。由于电阻电容较大,充电时间很长,信号延迟很大。从吞吐率上来说,信号传输需要经过整个总线或交换开关,其带宽是无法适应处理器核数量的快速增长的。在功耗方面,无论是多核的总线还是交换开关,其功耗均不可扩展,这种劣势决定了基于总线的互连结构无法支持多核处理器对互连带宽的迫切需求,也促使处理器设计者放弃这种简单的结构而谋求更为复杂且可扩展性好的片上互连方式。
为了改变这种传统的互连方式,人们提出了使用NoC的方法。此方法使处理器的诸多核可以通过分布式的通信方式相互沟通,从而避免了集中的互连设计带来的系统性能瓶颈以及较大的功耗开销。第一个采用片上网络来连接处理器核的设计是2002年麻省理工学院研制的RAW处理器。该处理器也是随后Tilera公司TILE系列商用处理器的原型。
多核处理器通常由多个“瓦片”(tile)组成,也称为瓦片式多核处理器(tile- organized multi-core)。以Intel公司的SCC(single-chip cloud computer)[4]为例,每个瓦片由三部分功能硬件组成,如图1.2所示:处理器核(core)与私有高速缓存(通常称为L1缓存),*后一级高速缓存(通常称为L2缓存)以及片上路由器(router)。tile之间通过两个片上路由器之间的传输链路(link)实现互连互通,所有片上路由器与传输链路组成了NoC。NoC借鉴了分布式计算系统的通信方式,用路由和分组交换技术取代传统总线,实现处理器核与片上存储的连接,NoC采用包交换的形式,使得每个计算/存储节点通过双线通道连接到相邻的节点,访存请求或访存数据被打包后,根据特定的路由算法,被路由器送往相应节点的L2缓存、内存控制器或L1缓存。
图1.2 Intel公司的SCC片上网络[4]
节点与节点的连接方式决定了片上网络的拓扑,不同的拓扑连接方式往往适合不同类型的数据交换,常用的规整拓扑有网格(Mesh)结构、环状体(Torus)结构、蝶形(Butterfly)结构、C-Mesh结构等。为了方便布局布线,商用多核处理器的NoC一般采用较为简单的拓扑结构,如图1.2的SCC采用Mesh结构互连,其特点是金属层布局布线简单,便于规避死锁并具有良好的可扩展性,因此也为国内外研究中较为常见的一种拓扑结构。
多核处理器运行的应用朝多样化发展,互连方式也随之革新,尤其在云计算日益发展的情况下,数据中心中的一些云应用(例如流媒体,数据分析、挖掘,MapReduce?等)对多核处理器的体系结构有了新的需求。云应用的指令跨度大,数据相关性小,第一级高速缓存往往无法容下应用所需要的全部指令与操作数,造成第一级高速缓存的缺失率很大。因此,有学者提出采用图1.3所示的体系结构,在传统的总线式互连(图1.3(a))以及瓦片式互连(图1.3(b))的基础上采用横向扩展的方式(scale-out,图1.3(c)),将原有的第一级指令/数据缓存去掉,将一定数量的处理器核与*后一级高速缓存组织在一起(称为一个pod),片上网络仅负责处理器核与*后一级高速缓存的数据通信。由于去掉了第一级高速缓存,缓存一致性的数据流便不再在片上网络中出现。每个pod运行独立的操作系统,pod之间相互独立,避免了应用间的干扰提高了处理器的运行时性能。此外,这种体系结构简化了互连,减小了硅片的面积,从而降低了功耗。
再如图1.4所示的多核处理器体系结构,*后一级高速缓存用片上网络互连,拓扑结构采用扁平蝶形(flattened butterfly)结构,以提高访存带宽,从核到*后一级高速缓存采用单一路径,也即只有从“核到高速缓存”以及从“高速缓存到每个处理器核”的路径,路由器设计也简化很多,减小了功耗开销。
图1.3 横向扩展(scale-out)多核处理器体系结构[5]
图1.4 云计算处理器的片上互连[6]
近年来,研究人员试图寻求新的NoC体系结构来降低其日趋增大的功耗开销,例如多NoC设计(multi-NoC)[7],异构NoC(hetero-NoC)[8, 9]、无输入缓存的NoC(bufferless-NoC)[10]以及基于硅激光互连的NoC(optical-NoC)[11,12]等,此类互连网络具备卓越的传输带宽并减小了路由器的硬件开销,大幅降低了NoC的功耗,因此得到很多处理器设计者的青睐,但是随着处理器规模的不断增大以及运行应用的多样化,数据流在片上网络中的分布更加不可预测,其性能与功耗仍旧将是长期限制处理器整体能效的重要因素。
1.1.3 多核处理器的内存系统
多核处理器面临比单核时代更严重的访存效率问题,需要更高效的多级存储层次以及互连机构作为数据存储和搬运的介质以满足计算的数据带宽需求,类似单核处理器的存储层次,多核处理器同样通过设置寄存器、缓存(cache)、主存三大主要层次,利用局部性来缓和处理器与存储器之间的性能差距。由于多核处理器之间需要数据通信与同步,处理器核与各自私有的缓存之间,共有缓存之间、缓存与主存之间的通信都要通过片上以及片间的互连提供通道,所以整个存储层次通过互连组织成了一个整体,也就是多核处理器的内存系统。
多核处理器的缓存主要有两种实现方式,一种是软件控制的存储结构,也被称为高速暂存存储器,它可以通过程序显示地进行分配和访问,可以由系统直接从主存读入或写回,高速暂存存储器中的数据是主存数据的一个子集副本,本身的数据一致性完全由软件负责,大多数图形处理单元(graphics processing unit, GPU)和专用应用处理器(application specific instruction set processor, ASIP)中的片上缓存都属于这一类。另外一种就是对系统透明的缓存,其被广泛地应用到通用处理器中。此种缓存完全由硬件管理其数据替换、插入以及数据一致性,大多数同构片上多核通用处理器都采用此种缓存。多核处理器片上缓存通常分为多级,然后根据需要分为共享以及私有缓存。L1缓存通常为处理器私有,容量空间相对较小,如32KB或54KB。私有缓存只能被它所连接的处理器核所访问,而共有缓存可以通过互连为多个不同处理器所访问,这样可以获得较高的空间利用率,满足不同程序的动态需求。但是由于程序之间存在争用与干扰,共有缓存也会存在性能问题或公平性问题,这时候共有缓存需要有效的空间划分方法或替换算法保障程序性能。共有缓存可以在不同缓存层次中实现,例如Sun公司设计的Rock处理器采用多核共享L1缓存的形式,满足细粒度线程通信的需求。
常用的共有缓存一般位于末级缓存当中,因此具有较大的空间,
展开