关于ILP,TLP,SMP,CMP,CMT的讨论

传统通用微处理器体系结构的局限性 

我们日常所见的以X86 为代表的通用微处理器均是采用诺依模型的单处理器单指令流芯片,以计算为中心的-诺依体系结构规定了计算机存储式程序(Stored Program)的运作方式,即CPU的处理所需的指令和数据只能经由存储器获得。

当前,传统的微处理器主要有如下三方面的发展局限性:

内存带宽和访问延迟的限制

在摩尔定律的推动下,CPU的速度差不多每隔两年就提升一倍。然而,从目前的技术发展现状看,存储器的速度提高得很慢,基本上内存访问速度每隔六年才提升一倍。因此,这两者差距越拉越大,从而造成了CPU空算等待存储器的时间占了很大的比例。根据统计数据,在高主频的计算机中,有可能高达85的时间浪费在等待内存的存取上。如果将处理器比作一个工厂的流水线,那么这就意味着,整个流水线大部分的时间都是空闲着,因为不能获取需要处理的原材料。

指令级并行遭遇危机

为了提高处理器的性能,传统的解决方法是力图不断提高处理器的指令级并行性(ILPInstruction Level Parallelism)。所谓ILP是指在处理器中引入多个功能部件(注意:是功能部件而不是处理器内核),例如:整型处理部件、浮点处理部件、加载/存储部件等为处理器提供并发利用这些功能部件执行多条指令的能力。处理器负责挖掘指令间的并行执行能力,即:找出能够同时分别使用这些部件的不相干指令,在每个时钟周期内发送和执行尽可能多条指令。近年来,人们为了提高处理器的指令级并行度更是做了不懈的努力:一方面将一些原来应用于大型机的体系结构技术,例如:超标量,多级缓存,预测执行等指令级并行处理技术引入到微处理器芯片;另一方面,引入深度流水,将指令的执行划分为更多更细的流水级。

然而,相关技术的副作用以及计算类型的转变使得ILP技术已经难以满足处理器性能进一步增长的需求并可能成为约束处理器性能增长的主要因素。一方面,超长流水线引入了超大指令窗口,一旦转移预测失败,就势必要将多个预先加载的指令清空并重新加载新的指令,这一操作过程对于处理器的性能的影响是非常大的,往往会带来不可忽视的性能损失;另一方面,ILP本身也不再适应计算应用类型的变化了:ILP技术更多的适用于传统的计算密集型应用,这类应用中ILP程度较高,能够利用ILP类型的处理器提升应用的性能。而当代以商用事务处理和Web应用为代表的数据密集型的应用,其控制流非常不规则,ILP非常低,难以有效利用ILP技术提升性能。

处理器主频的提升不再有效

伴随着指令流水线的不断细化,以及集成电路工艺水平的不断提高,微处理器的主频也在迅速提升。近年来,主频更是成为提升微处理器的性能的主要推动力:微处理器的主频迅速的完成了由9033MHz到现在2GHz以上主频的飞跃。

但是,时至今日,主频的增长速度正日益趋缓,主频增长带来的副作用却日益显著。首先,主频的增长是以硬件设计和工艺的复杂度的提升为前提的。随着芯片集成度的增加和线宽变窄,处理器的设计、验证和测试变得越来越困难,为提高性能而增加的硬件资源利用率不高,性能的增长空间有限。相对而言,主频增长所带来的功耗的增长比性能的增长则要快得多。例如,从Intel 80486PentiumPentium IIIPentium IV4代处理器,整数性能提高了5倍左右,而晶体管数增加了15倍,相对功耗则增加了8倍。微处理器芯片呈现出更快、更大、更热的发展趋势。其次,主频增长依赖的超长流水线技术也使得分支预测失败后流水线指令清空和重新加载所需要的周期大为延长,所带来的性能损失大大削弱了主频提升所带来的性能增益。

不可否认,ILP技术以及主频的提升在一定程度上、一定时间内提高了计算机对于单一线程执行速度。然而,相对于CPU主频、复杂程度的提升,计算机的整体性能并没有取得相匹配的增长。这其中的主要原因就在于:从计算机体系结构的角度来看,传统的技术并不能有效、充分的利用计算机的整体硬件能力。

1.2 计算机应用的演变

时至今日,以商用事务处理和Web服务为代表的应用日益成为服务器应用的主流。回顾计算机的近30年发展历史,我们不难发现,计算机应用已经从传统的以SPEC CPU2000为代表的计算密集型的科学技术应用,发展到了现今的以SPEC JBB2000为代表的数据密集型应用,表现出完全不同的执行和数据访问的特征。

传统的计算密集型应用,对于数据的运算操作远远多于数据的装入操作,因而具备很高的代码和数据访问的局部性,能够有效的利用预取操作数、Cache等技术来弥补内存带宽的不足以及内存访问未命中所造成的时间延迟。

当前面向商用事务处理的主流服务器应用,则是数据密集型的应用。也就是说,这些应用所需数据的时间和空间局部性很差,数据重用的可能性很低。这时,传统的高性能计算机的构造方法就不能适应新的应用的需求了,具体表现在如下几个方面:

 

  • 传统的以计算为中心的体系结构(-诺依体系结构),不适应新应用类型中不规则的计算和内存访问特性,不适应这些应用中代码和数据局部性的变化。
  • 应用的并行算法模型与实际的并行体系结构不匹配,需要寻求与当前的新应用类型相匹配的有效并行算法和体系结构。
  • 计算,存储, I/O  的速度越来越不匹配,平衡体系结构的设计越来越困难。当前主流的商用微处理器主频均在 GHz 以上,存储总线主频还在 MHz 水平 ;处理器速度每年增长 60% ,存储器存取延迟每年仅改善 7% 由通信带宽和延迟构成的”存储墙( Memory wall )”成为提高系统性能的最大障碍。
  • 传统的体系结构方法已跟不上摩尔定律的发展,大量浪费了摩尔定律所提供的计算潜力。

因此,和计算机应用的演变相适应,高端计算机的核心评价指标正在发生根本性的变化,从高性能计算(High-Performance Computing)转向高效能计算(High-Productive Computing),从强调单任务的性能到更多的强调多任务处理的吞吐量(Throughput)。正是基于这一认识,早在2003年,Sun公司在发布其今后处理器产品蓝图时,就已经将系统吞吐量计算(Throughput-computing)作为今后研发的重点。

所以,构建高主频、复杂的ILP处理器,并不能够解决传统的处理器体系结构中固有的问题。为了提高系统整体的性能,就势必要求突破传统的思路,开发ILP之外的更粗粒度的并行性。

2TLP的提出

在这种情况下,线程级并行(Thread Level Parallelism, TLP)技术应运而生。TLP技术将处理器内部的并行由指令级上升到线程级,旨在通过线程级的并行来增加指令吞吐量,提高处理器的资源利用率。TLP处理器的中心思想是:当某一个线程由于等待内存访问结构而空闲时,可以立刻导入其他的就绪线程来运行。这样,处理器流水线就能够始终处于忙碌的状态,系统的处理能力提高了,吞吐量自然也相应提升了。我们可以从下面示意图的比较看出TLP相对于ILP的优势。

1中,传统的ILP方式下,单纯的提高CPU的运算速度,对于整个系统性能的提升所起到的作用微不足道。

关于ILP,TLP,SMP,CMP,CMT的讨论

1:考虑到内存访问所耗费的时间,将单线程处理器的运算速度提高一倍,对于整个应用处理速度的提升所起的作用非常有限。

关于ILP,TLP,SMP,CMP,CMT的讨论

2. TLP通过注入多个线程来削减系统内存访问延迟带来的副作用

在图2示意的TLP处理器的理想状态中,由于内存访问而导致的延迟可以经由导入其他线程的执行而抵消。相对而言,ILP只能够缩短指令在CPU中的执行时间,却不能有效改善由于内存等待而造成的延迟。:使用乱序执行out-of-orderILP处理器能够小幅度利用内存等待的延迟来执行指令。当前处理器的运行速度普遍都在GHz的水平,性能瓶颈转移到内存和I/O的延迟,较之于ILP,在解决I/O和内存访问延迟方面,TLP具备显著的优势。

TLP不仅仅是单纯从技术角度提出的学术观点,而且也符合了服务器应用的特征。现今的网络计算环境从本质上来说就是多线程的,这就决定了相对于整体的吞吐量而言,单个线程的执行速度并不那么重要了。这也可以解释:对于服务器端的企业级商务应用,传统的ILP方式的高主频系统并不能够有效的提升系统的效能。下表给出了一些实际服务器应用的具体情况。从表中可以看出,许多典型的服务器端应用需要处理大量的并发线程的能力,而并不是提高单线程的执行速度。换言之,对于服务器的并发工作环境,TLP才是提升性能的王道。

负载特性

Web-Centric

Application-Centric

Data-Centric

性能指标

Web (SPECweb99)

Application (SPECjAppServer2002)

SAP-SD 2Tier

Data TPC-C

SAP_SD

3Tier (DB)

DSS TPC-H

应用类型

Web服务器

应用服务器

ERP

OLTP

ERP

DSS

指令级并行度

线程级并行度

指令/数据工作集

数据共享

1、常见的服务器端企业级应用中的指令级并行度和线程级并行度的比较

现在,业界普遍认为,TLP将是下一代高性能处理器的主流体系结构技术,ILP将仅仅成为TLP中表示性能的辅助参数。

3SMP技术

SMP的全称是”对称多处理”(Symmetrical Multi-Processing)技术,可以看作是一种从宏观角度支持TLP的体系结构技术。SMP是指在一个计算机上汇集了多个CPU,各CPU之间共享内存子系统以及总线结构。它是相对非对称多处理技术而言的、应用十分广泛的并行技术。在这种架构中,一台电脑不再由单个CPU组成,而同时由多个处理器运行操作系统的单一复本,并共享内存和一台计算机的其他资源。虽然同时使用多个CPU,但是从管理的角度来看,它们的表现就像一台单机一样。系统将任务队列地分布于多个CPU之上,从而极大地提高了整个系统的数据处理能力。所有的处理器都可以平等地访问内存、I/O和外部中断。在对称多处理系统中,系统资源被系统中所有CPU共享,工作负载能够均匀地分配到所有可用处理器之上。SMP技术是高性能服务器和工作站级主板架构中提升性能的有效手段,像某些UNIX服务器可支持高达256CPUSMP系统。

然而,传统的SMP系统内部的多个处理器通过片外总线互连,共享总线带宽,传统总线所固有的低带宽、高延迟已经成为SMP系统的性能瓶颈。在SMP方面的一种发展趋势就是将SMP系统搬到一块芯片内部,利用片内的高带宽总线来代替片外总线,实现片内高带宽的SMP超级计算机。

4CMTCMPMT

4.1 CMP-单芯片多处理器=片内SMP

TLP的研究已经开展许多年了,学术界提出了多种实现方式,其中又以Stanford大学的单芯片多处理器(CMP, Chip Multi-Processor)的Hydra CMP为典型代表。CMP的基本思想是在单个芯片上实现SMP,每一个处理器核心实质上都是一个相对简单的单线程处理器。CMP允许线程在多个处理器内核上并行执行,从而利用线程级并行性来提高系统性能。下图是Hydra CMP的体系结构。可以看出CMP主要是依赖SMP体系结构来实现TLP的。

关于ILP,TLP,SMP,CMP,CMT的讨论

3. Hydra CMP的结构示意图

4.2 MT-多线程处理器Multi-threading Processor

为了理解CMT,我们还有必要看一下多线程处理器(Hardware Multithreading)。顾名思义,多线程处理器是在一个处理器内核中提供支持多个”硬”线程(Hardware Thread)的能力,通常由处理器内核为每个线程维护独立的处理器状态,包括寄存器与程序计数器PC等,并能够快速地切换线程上下文。由于多线程处理器在遇到延迟事件时,可以将线程迅速切换去执行另外一部分程序代码,从而有效避免了将时间浪费在延迟等待上。下图中给出了一个支持硬件多线程技术的CPU在四个硬线程之间切换的情况,可以看出,在这种方式下,处理器的流水线始终保持在满负荷的工作状态,即便是某些线程由于内存访问被阻塞。

关于ILP,TLP,SMP,CMP,CMT的讨论

4:多线程处理器在不同的硬线程间切换,这样就能保持CPU满负荷的工作,即便是某些线程由于内存访问延迟被阻塞。

我们小结一下,多线程处理器MT赋予CPU在多个线程中转换处理的能力,是一个超标量处理器内核。一个CMP是由若干个单线程处理器以SMP(对称多处理器系统)方式构成的支持TLP的系统,如果我们用MT处理器去置换CMP中的一个个的单线程处理器内核,使用多线程处理器来构造SMP方式的TLP系统,岂不是锦上添花?没错,这种将CMPMT相结合的创新就是CMT技术。

4.3 片上多线程Chip Multi-threading (CMT)

简言之,CMT就是在一块芯片上集成多个MT处理器内核所构造的支持TLPSMP系统。和极为复杂的传统单线程处理器不同,CMT技术采用相对简单的多线程处理器核心。每个处理器核心都维护多个线程,线程一直保持运行状态直到被阻塞,这时流水线将立即切换到另外一个就绪的线程。CMT处理器的一个天生优势是:由于这些单个的处理器核心的流水线相对简单,它们的制备不那么复杂,因而能耗低,散热量小。下图示意了一个4核的CMT技术的CPU,支持并发16个线程。

关于ILP,TLP,SMP,CMP,CMT的讨论

由于CMT采用了可以采用相对简单的多线程微处理器作为处理器核心,使得CMT主要具有以下优点:

● 设计和验证周期短:微处理器厂商可以基于成熟的多线程处理器作为处理器核心,从而缩短设计和验证周期。

● 控制逻辑简单, 扩展性好,易于实现。

● 功耗低:一方面,CMT技术是通过TLP方式来追求高吞吐量的效能计算,无需过分追求单个内核的高主频,不存在高主频引起的高功耗;另一方面,还可以通过动态调节电压/频率、负载优化分布等,有效降低处理器的功耗。

● 片内高带宽通讯:CMT处理器相当于是将一个SMP系统集成于一块芯片内部,绝大部分信号局限于处理器核心内,包含极少的全局信号,因此线延迟对其影响比较小。利用现有的工艺水平,可以提供片内高带宽的通讯方式。

4.4 CMT:吞吐量运算和性能的有力保障

CMT技术,通过引入全新的体系结构来尽可能充分的利用系统的资源,提高系统的吞吐量。一方面,系统由多个实实在在的处理器内核构成,确保系统多发射的有效执行。另一方面,每一个内核内部又是多线程的,执行部件在各个硬线程之间迅速切换,又能够进一步提高系统的利用率,提高并发执行的指令数目,提升系统的吞吐量。可以说,这种全新的体系结构为提升应用程序的性能提供了有效的保证。我们来具体看一下CMT处理器体系结构的运行特征。

首先,相对于传统的单内核处理器,CMT处理器中提供了物理上而非逻辑上的多个处理器内核,提供了多套执行部件。这样的系统,无需借助复杂的硬件分析设备或者复杂的编译器,就能够真正并发处理多个指令,而不用考虑指令之间的相关性。

其次,相对于单线程的处理器而言,CMT处理器能够大幅度抵消内存访问延迟带来的副作用。当某一个线程由于内存访问而必须等待时,传统的单线程机器必须作一系列的空闲操作等待内存访问的结果,而CMT则可以迅速切换到另外一个就绪的线程,忽略前一个被阻塞的线程,这样,内存访问所造成的延迟就有可能最大程度上的被CMT的线程切换能力所屏蔽了。如果从CMT内部来看,则是每一个多线程处理器内部的流水线都能够经常性的保持满负荷的运作,不断的处理就绪的线程。所以,CMT处理器内部的处理效能就大大提高了,不用把能耗浪费在无用的空闲操作上。

另一方面,我们也必须牢记CMT的设计初衷:CMT是为了提高系统的吞吐能力,而不是为了提高单个线程的执行速度。正因为如此,单线程的程序在CMT上运行一个实例时的性能可能不如在传统的单线程处理器上运行的性能好。这主要是由两方面的原因造成的:

你可能感兴趣的:(杂谈)