现代微处理器相关文献总结报告
作者:互联网
目录
最近上的嵌入式课程要求阅读文献写一份报告,文献有三篇,分别是微处理器体系结构1,alpha 21264处理器介绍2以及超标量处理器的微架构3。我们的课程现在所学到的主要内容是处理器流水线相关技术的方面,所以本文也就主要对文献中诸如超标量技术,分支预测技术等做些总结与思考。
一、微处理器体系结构
1、 总览
在第一篇文献中,我主要关注了文章中涉及的超标量处理技术的问题和相应解决方案以及分支预测技术的几类结构。
2、 处理器性能评估以及基本流水线
文章中首先提到了微处理器结构设计的三方面原则,分别是流水线、并行、局部性原则。个人认为,其中的流水线是核心,并行以及处理并行问题是提高性能的关键,而局部性原则是处理器得以进一步提升性能的潜在力量,这种局部性原则主要体现在内存层次结构、分支预测等技术的实现。文章还提到处理器性能评估方法——处理器的基本性能指标是每周期执行的指令数(IPC),一般情况下处理器的IPC越大越好(IPCmax=1),但单看这一项是不够准确的,还需要考虑实际处理器在基准测试程序下的运行情况,包括程序执行时间、处理器繁忙比例、缓存未命中的发生以及预测出错所花费的周期成本等,综合分析处理器性能的优劣点。
处理器的基本五级流水线可分为一下步骤:取指(IF),译码(ID),执行(EX),访存(MEM),写回(WB)。在处理器的流水线结构中,存在着三种冒险:
(1)数据冒险:由于指令间的数据依赖所导致的冒险,一般指写后读依赖产生的冒险。解决方案为使用forwarding链路进行数据的向前传输,但该方案无法解决load-store指令引起的数据冒险,故必要情况下加入暂停单元(stalling unit)以插入空闲指令。
(2)控制冒险:在流水线取到分支跳转类指令时,需要两个机器周期以上才能知道是否跳转,这在具有大量循环的程序中导致处理器效率极低,因此采用分支预测技术实现指令的预测。
(3)结构冒险:在基本的五级流水线中,同一时间五级步骤都有指令在执行,而取指与访存阶段将由于同时访问存储器的现象而出现结构冒险,解决方案为将指令存储器与数据存储器分开存放,保证逻辑资源不冲突。
3、超标量技术
关于超标量技术,在微处理器中这是通过重复设置多个功能部件,并让这些功能部件同时工作来提高指令的执行速度,实际上是以增加硬件资源为代价来换取处理器性能的。使用超标量技术的处理器在一个时钟周期内可发射多条指令。超标量处理器还需要增加额外的逻辑电路来调度这些同时取出的指令,比如寄存器重命名,重排序缓冲区,保留站等。
(1)寄存器重命名规则:对有写操作的目标逻辑寄存器进行重命名(分配一个单独的物理寄存器),直到该逻辑寄存器可用时才能被后面的指令读取。
(2)保留站/指令窗口:用于指令的动态发射,发射指令时采用先准备好的指令先执行的原则。窗口中的每个单元保存指令的就绪状态,包括指令类型,源寄存器的就绪状态,目的寄存器的物理名称以及目的寄存器对应于ROB中的名称。
(3)重排序缓冲区规则:缓冲区为一个FIFO,其中每个单元保存一条指令的运行状态信息,包括运行完成标志,指令生成得到的结果,目的寄存器名以及指令类型。缓冲区以head和tail标志来划分缓冲区的长度,head标志对应的指令执行完成才可将head标志向后移(保证指令退出的有序性),加载新的指令则会将tail标志后移。
4、分支预测技术
关于分支预测技术:当包含流水线技术的处理器处理分支指令时就会遇到一个问题,根据判定条件的真/假的不同,有可能会产生转跳,而这会打断流水线中指令的处理,因为处理器无法确定该指令的下一条指令,直到分支执行完毕。流水线越长,处理器等待的时间便越长,因为它必须等待分支指令处理完毕,才能确定下一条进入流水线的指令。分支预测技术便是为解决这一问题而出现的。分支预测的抽象模型结构如下图所示,包含事件源(Prog. exec.),事件选择(Event selec.),分支预测索引(Pred. index),预测机制(Pred. mechan.),反馈(Feedback)。
在该模型中,事件选择用于选出控制类指令,分支预测索引用于搜寻历史分支信息,预测机制用于生成预测结果,反馈部分用来更改事件源和修正分支预测索引。在分支预测模型中有以下四种较为典型的实现方法:
(1)静态预测:预测所有分支一定会跳转/预测所有分支都不会跳转。对于忽略分支预测、PC无脑+1的结构,其本身相当于是预测了所有分支都不会跳转;预测分支一定会跳转的结构早期应用在科学计算中,因为大部分的程序都是高频次的for/while循环,预测分支一定会跳转的成功率更高。静态预测方案的优势在于硬件成本较低,但缺点在于预测失误的惩罚过高。
(2)简单动态预测:预测模块可以提前到取指阶段,在预测是否跳转的这个方面的准确率上比静态预测方案高。该方案采用有限状态机模型,将分支的跳转与否作为状态机的输入条件,状态机当前的状态作为对当前分支的预测。实验表明四状态的2位饱和计数器具有较高的准确率,同时硬件成本比更高位的计数器低。
(3)相关分支预测:考虑到分支间可能存在一定的相关性,使用两级状态进行预测,第一级为全局寄存器,记录全局跳转情况,第二级为计数器表。使用全局寄存器的值为索引检索计数器表,得到的计数值即为当前分支的预测结果。在全局寄存器比较大的情况下,其准确率比较高,该方案优点在于能快速学会预测具有周期重复性的跳转。
(4)二级分支预测:采用两级结构,根据每级采用的结构不同分为不同的情况,A. GR+PHT,B. GR+PHTs,C. BHT+PHT,D. BHT+PHTs,本地历史寄存器的引入一定程度上忽视了全局方案的相关性,要想即预测相关性又能预测跳转模式,则考虑使用混合使用预测方案,如锦标赛预测器。
这几种预测模型中,他们的预测目的在于程序是否会跳转,而不关注跳转到哪里去,即不对目的地址进行预测。完整的预测模型还应包含目的地址的预测,一般情况下目的地址采用类似缓存的结构BTB用来记录分支指令的地址和与之相关联的目标地址,提取指令时如果分支预测执行跳转且命中BTB中的目标地址,则接下来PC将设置为该地址。
最终在同时考虑分支方向预测与目的地址预测,预测失误的情况共有三种:方向错误,方向正确但BTB无内容(未命中),方向正确但BTB命中地址错误(误取)。这三种失误情况下,一旦预测的方向发生错误,则所损失的机器周期成本会达到最大。
二、Alpha 21264处理器介绍
1、总览
Alpha 21264是一款较为标准的超标量微处理器,具有乱序执行和推测执行功能。它的峰值执行率为每个周期 6 条指令,每个周期可以维持 4 条指令。它有一个七级指令流水线,其中核心技术点在于取指、执行以及处理功能单元的设计。在这篇文献中,文献本身主要详细介绍了alpha 21264的架构设计,我主要关注了它的流水线结构设计和超标量处理设计部分。
2、重要的流水线阶段及结构
1)取指
在流水线的取指阶段,每个周期向乱序执行引擎传送 4 条指令。处理器通过行路预测和分支预测推测性地获取接下来的指令和程序指针的跳转。
(1)行路预测:使用line prediction和way prediction用来预测下一组指令从何处获取,指令被填充在4个64 byte大小的cache中。在该预测器中预测失误则会浪费一个时钟周期,预测成本较低,并且其预测成功率也比较高,80%到100%。
(2)分支预测:采用tournament分支预测方案,该方案在两种类型的分支预测器之间动态选择(一个局部分支预测器,一个全局分支预测器),其预测准确率为90%到100%
2)执行
在流水线的执行阶段,通过寄存器重命名和乱序问题队列实现乱序的超标量处理。寄存器重命名时,处理器将得到的4条指令为每个有写操作的寄存器分配一个存储位置,只有当指令执行完以后才能将内部寄存器变为用户可见寄存器,也即某指令在对某一寄存器写操作时,该寄存器不可用(not ready),只有写完后其他对该寄存器有操作的指令才能运行,保证了并行执行中的部分指令的顺序性。乱序问题队列是指指令序列的乱序执行队列,指令序列用来存储待执行的指令,每次执行指令时只取操作数就绪的指令,操作数的状态被存储在scoreboard中,同时每个时钟周期结束后该状态会更新,使用仲裁器实现指令的调度。在指令执行开始后,只要之前的所有指令都退出,它就可以退出,并且保证不会产生异常。指令退出后会释放掉他所产生的寄存器。程序异常时,指令队列会被清空,寄存器映射会被备份。
3)处理单元
Alpha 21264处理器的处理单元采用分簇管理的方法,如下图所示
。对于整型执行流水来说,Alpha 21264将整型寄存器文件复制成两份,每一份都包含所有的80个整型寄存器。4个整型执行单元中,每两个执行单元访问一个寄存器文件这样的一组构成一簇,另外的两个执行单元和寄存器文件构成另一簇,两簇组合成为整个整型执行流水,支持一次发射四条整型指令。整型执行单元的分簇结构设计简单且快速,但是它花费了额外的时钟周期在两个簇之间传递寄存器信息保持两个寄存器文件保持一致。由于分簇结构和发射单元仲裁导致的性能损失是很小的,根据原文所诉,与大部分理想化的非分簇应用相比性能损失可能只有很小百分比。其主要原因有:1.对于许多操作来说(例如load/store指令)它们只能够在上部或者下部的执行单元中执行,所以发射队列静态的选择仲裁器并不是限制性能的原因;2.关键路径的计算倾向于在同一个簇上执行,发射队列仲裁器对于之前发射过的指令往往都选择同样的簇再次执行,这样就减少了关键指令需要等待跨簇延迟的问题,也就是说一条指令通常被选择在产生其需要用到的数据的前面的指令执行的簇进行执行,这样就避免了等待簇的通信延迟。
4)缓存结构
文章还提到Alpha 21264 有两级缓存——主缓存和二级缓存,不像Alpha 21164有三级缓存,主要是因为带宽受限。在Alpha 21264中,主缓存被分成单独的指令和数据缓存(哈佛架构),分别是 I-cache 和 D-cache。两个缓存的容量均为 64 KB。D-cache 是双端口的,通过在时钟信号的上升沿和下降沿传输数据。这种双端口结构可以在每个时钟周期内对缓存进行任何读取或写入组合。
三、超标量处理器的微体系结构
1、总览
这篇文献主要讲了超标量处理器设计的基本原则以及在流水线重要阶段中使用的特定技术。包括指令获取阶段、寄存器值的数据相关问题、并行指令的发射、内存的加载与存储优化和指令的提交等。
2、核心技术步骤
1)取指
在指令获取阶段,超标量处理器都会设立一个指令缓冲区,缓冲区的目的是为了消除由缓存未命中和分支导致的指令提取数量的变动,使用这个缓冲区,获取到的指令可以建立一个“库存”,以便在指令提取暂停或受限时使处理器能够度过一段时间。默认的指令获取方法是按获取的指令数递增程序计数器,并使用递增的程序计数器获取下一个指令块。但是,对于有可能改变程序计数器的分支指令,指令获取阶段必须重定向才能从分支目标获取指令。由于重定向过程中可能出现延迟,因此分支指令的处理对于超标量处理器的良好性能至关重要。具体的分支预测方式在第一篇报告中已说明,此处不再赘述。
2)解码
在指令解码阶段,指令解码的任务是为每条指令设置一个或多个执行元组。执行元组是一个有序列表,包含:1)要执行的操作,2)输入操作数驻留的存储元素的标识,3)放置指令结果的位置。在此阶段中会对指令中的目的寄存器进行重命名,重命名有两种方法:一是为逻辑寄存器再关联一个物理寄存器,二是在硬件设计上设计一个与逻辑寄存器文件大小相同的物理寄存器文件,并保持一对一的对应关系。
3)指令发射
在指令发射阶段,指令发出分为单队列和多队列发出,单队列发出时不需要寄存器重命名,多队列发出时根据指令类型(如浮点类,整数类,加载存储类)发出指令。在指令发出时,并非按照FIFO的顺序,而是将操作数数据保留在预留缓冲区中,然后按照先准备好的指令先执行的原则来执行。
4)访存优化
文章中还提到关于访存速度优化的方案,针对访存延时较高的问题,往往会采用内存层次结构,即一个主级高速缓存和多个辅助缓存进行搭配。但缓存的设计总是有可能出现未命中的情况,根据原文作者所述,可以采用描述符缓存技术搭配缓存结构,从而一定程度上减少访存时间。
最终在超标量处理器中,为保证指令的顺序提交,在指令提交阶段采用重新排序缓冲技术,该技术在前文中已有描述,此处不再赘述。
标签:预测,总结报告,微处理器,跳转,指令,处理器,寄存器,文献,分支 来源: https://blog.csdn.net/jkjijijkv/article/details/121300230