本系列为《超标量处理器基础》学习笔记,多数为书中内容,摘取感兴趣的部分稍作整理。
体系结构指指令集体系结构,即指令集的规范,⽽微体系结构是指体系结构的具体逻辑实现,同⼀种指令集体系结构可以⽤不同的微体系结构,并采⽤不同的流⽔线设计,不同的分⽀预测算法等。
微体系结构的多样性使得同⼀种体系结构能够不断地推陈出新,并利⽤新出现的微体系结果技术来提⾼微处理器的性能,同时⼜保持代码的兼容性。
微处理器是指令集处理器(ISP, Instruction Set Processor)。ISP执⾏预先定义指令集中的指令。微处理器的功能⼏乎完全取决于指令集,从⽽表明了它的执⾏能⼒。所有运⾏于微处理器上的程序都要基于指令集进⾏编码。预定义的指令集称为指令集体系结构(ISA,
Instruction Set Architecture)。ISA是软件与硬件之间的接⼝,或者是程序与处理器之间的接⼝。ISA是设计的规范,⽽微处理器或ISP是设计的实现。
微处理器的发展符合摩尔定律,即在单个芯⽚上的器件集成度将以每18个⽉到24个⽉的速度翻⼀番。
体系结构、逻辑实现和物理实现
体系结构规定了处理器的功能性⾏为,逻辑实现是实现体系结构的逻辑结构和组织,物理实现是逻辑实现的物理结构和具体表现形式。体系结构对指令集处理器的指令集合进⾏说明。为了能被处理器执⾏,所有的软件都必须与指令集匹配、或者⽤该指令集进⾏编码。每个程序都被编译成这个指令集的⼀个指令序列。
逻辑实现就是体系结构的具体设计,也称为微体系结构。某种体系结构在它的ISA⽣命周期内可以有许多逻辑实现。对于在这个ISA上编写的任何程序,同⼀体系结构的所有逻辑实现都可以执⾏。与逻辑实现相关的⼀些概念包括流⽔线设计、cache存储器和分⽀预测器。物理实现是设计的具体物理表现形式,通常是单芯⽚或多芯⽚的封装。对于⼀个逻辑实现,可以有许多不同的物理实现,按时钟频率、cache存储器容量、总线接⼝、结构技术及封装等⽅⾯的差异⽽具有不同的形式。
ISA
1.指令集体系结构将软件与硬件或者程序与处理器之间的开发独⽴开来。程序可以根据ISA的规定进⾏开发,⽽不理会实际机器的实现细节,反之亦然。ISA较少重新编译和开发,对于新出现的ISA,开发与其相配套的编译器和操作系统将需要花费10年以上的时间。ISA存在的时间越长,基于这个ISA的软件应⽤基础将越⼤,将来取代这个ISA的困难就越⼤。
2.ISA是微处理器设计的规范,所有的实现必须满⾜这个规范并⽀持ISA规定的功能。相反,微体系结构的发展⾮常迅速。
3.每个ISA中有个内在的接⼝(动态-静态接⼝ DSI,Dynamic-Static Interface)定义,区别哪些是在编译时静态完成的,哪些时在运⾏时动态完成的,如下图:
通常所有在编译时由软件和编译器静态完成的⼈物和优化,在DSI之上。相反,所有在运⾏是由硬件动态完成的任务以及优化,认为是在DSI之下。所有的体系结构的特性都在ISA中规定,因此都处于静态区域。处于DSI之上的软件和DSI之下的微体系结构的发展是相互独⽴的。
ISA 设计中的关键问题是DSI放置的位置,DSI可以将⾼级语⾔编写的应⽤程序与底层机器的实际硬件放置到不同的抽象层次。可以通过编译器优化DSI上的内容,或者在微体系结构中优化DSI下的内容。(例如精简指令集的DSI位置放的⽐复杂指令集CISC更低,希望更多的通过运⾏DSI上的编译器完成优化,减⼩硬件复杂度,从⽽获得更快的机器速度。)
⼀个缺点
ISA不断发展的过程中加⼊了许多新的特性,可以将以前的实现特征提升到体系结构的层次,将某些原始的微体系结构特征暴露给软件,有助于编译器的优化,从⽽减⼩硬件复杂度,DSI的位置降低。这些特征成为ISA的⼀部分,则未来的实现必须满⾜这部分特征规范。但是随着硬件的发展,这些陈旧的特征可能低效过时,从⽽不利于性能提升,因此体系结构和微体系结构必须严格分离。理想情况下ISA应只包含表达功能或者软件算法语义所必须的特征,⽽不管那些优化程序性能的所有特征应该归⼊实现还是归⼊微体系结构领域。
处理器性能法则
处理器性能公式
处理器性能是根据执⾏⼀段特殊代码所需要的时间来衡量的(时间/程序, Time/Program),⼜可分为三项(1)指令数:特定程序需要执⾏的动态指令的数⽬;
(2)平均(在整个程序的执⾏范围内进⾏平均)执⾏每条指令需要耗费多少个始终周期,⽤CPI(Cycles Per Instruction)表⽰;(3)机器的时钟周期,每个时钟周期需要的时间
由公式1.1,可减少任⼀项来提升性能,但上述不是相互独⽴的,性能的提升需要权衡和折中。书本第7页1.3.2节处理器性能优化中描述了⼀些例⼦。
性能评价⽅法
功能仿真器:模拟体系结构的机器,⽤于验证程序能否被正确执⾏。性能仿真器:模拟微体系架构,测量执⾏⼀个程序所需要的时钟周期的数⽬。性能仿真器可分为路径驱动和执⾏驱动。
指令集并⾏处理
指令集并⾏处理可认为多条指令并⾏执⾏。串⾏处理⼀次执⾏⼀条指令,下⼀条指令执⾏之前上⼀条指令必须完成。
流⽔线处理器可重叠执⾏多条指令,若每个周期都有⼀条新的指令进⼊流⽔线,虽然每条指令的处理时间与串⾏的相同,但是多条指令的重叠可以让平均CPI降低到接近1。
标量处理器每个时钟周期⾄多只能取出⼀条指令并进⾏发射,超标量处理器则可以在每个时钟周期取出多条指令进⾏发射。CPI ⼩于1或者ICPI⼤于1的处理器成为超标量处理器。改写公式1.1如下:
指令数由ISA、编译器和操作系统共同决定。ISA每条指令的完成⼯作量对指令总数由影响,编译器效率、程序执⾏过程中,应⽤程序对操作系统的功能调⽤将增加执⾏的指令总数。平均IPC反应处理器达到的平均指令吞吐率。
减少流⽔线中每⼀段的逻辑门的级数、同时增加流⽔线的级数能提⾼时钟频率。为了获得很⾼的IPC,流⽔线必须设计的很宽,以便每⼀段中可以同时处理多条指令。流⽔线的加宽增加了硬件的复杂度,增加了流⽔线各段之间的信号传播延迟。因此在⼀个更宽的流⽔线中,为了维持相同的频率,流⽔线需要加深,这就需要在流⽔线究竟是要加宽还是要加深的选择中进⾏复杂的权衡。
并⾏处理器性能
指令集并⾏可以称为细粒度并⾏,粗粒度指程序段或者计算任务之间的并⾏。
⼏个名词
操作延迟(OL):将有⼀条指令产⽣结果后使⽤的机器时钟周期,即指令执⾏所需要的机器时钟周期机器并⾏度(MP):机器⽀持的可以同时执⾏的最⼤指令数⽬
发射延迟(IL):发射两条连续的指令之间需要的机器时钟周期,发射指⼀条新的指令初始化后进⾏流⽔线发射并⾏度(IP):每个时钟周期内可以发射的最⼤指令数
当OL = 1, MP = 4, IL = 1, IP = 1时的基准标量流⽔线处理器如下,4个过程表⽰取指、译码、执⾏和写回。
超流⽔处理器
⽐基准处理器有着更⾼的流⽔度,处理器的时钟周期⽐基准处理器短并定义为次时钟周期。⼀个基准处理器的时钟周期中有m个次时钟周期,OL = 1个时钟周期 = m个次时钟周期。IL = 1个次时钟周期。
即执⾏仍需要⼀个基准时钟周期并等于m个次时钟周期,但是执⾏时,处理器每过⼀个次时钟周期就发射⼀条新指令。IP = 1条指令/次时钟周期等于m条指令/时钟周期, MP= m * k,k为⼀个次时钟周期发射的指令数。
超标量处理器
超长指令字处理器
与超标量处理器的区别在于动态静态界⾯DSI的位置,超标量处理器中,运⾏时决定某n条指令发射到执⾏段,⽽超长指令字是在编译时进⾏的,编译器决定哪n条指令被同时发射到执⾏段,并将这n条指令作为⼀个超长指令字存放到程序存储器中。
因篇幅问题不能全部显示,请点此查看更多更全内容