基于RISC-V的指令退休单元与缓存一致性总线系统研究(二)

1 RISC-V指令集及流水线实现

本章从两个维度介绍RISC-V超标量处理器设计,首先是从指令集的角度研究RISC-V在高性能处理器的硬件实现上的可实施性与优势,其次从现代高性能处理器的角度,研究对RISC-V超标量处理器的流水线设计,并对应用与此的高性能处理器设计技术展开研究,包括超标量并发执行,指令分支预测,乱序执行,多核处理器等,以玄铁处理器为例,对其硬件的实现展开架构层面的探讨与研究。

1.1 RISC-V指令集

RISC-V指令集属于精简指令集(RISC),最早的精简指令集由John Cocke,Patterson等人提出,在2010年,加州大学伯克利分校的David Patterson和Krste Asanovic教授等人共同提出了RISC-V指令集的构想,如今RISC-V指令集成立基金会,并大力推广指令级架构的开放开源生态系统。

1.1.1 RISC精简特点

目前处理器芯片指令集分为两种指令架构:CISC和RISC。RISC指令集的每一条指令都有固定的长度,每一条指令只执行特定的一种操作,而CISC的每一条指令长度是不固定的,每一条指令可以执行多条操作。x86指令集属于CISC架构,复杂指令功能译码,数据控制,相关性判断和处理等因素都使得其处理器电路设计异常复杂。

RISC指令集则采用规整指令格式,指令译码、数据控制、相关性处理等电路设计会更为简化,因此功耗大幅降低。典型的RISC指令集包括ARM,MIPS,RISC-V等,RISC指令集和CISC指令集最大的不同点是他的每一条指令通常只能执行一种简单操作,这种设计大幅简化了硬件设计的成本,但为了处理一些比较复杂的操作,RISC处理器中的通用寄存器往往也是要远多于CISC处理器的,通过这种方式不再把复杂操作的中间变量频繁的放入到外部存储系统当中。

RISC-V指令集是典型的RISC指令集。从操作上来讲,RISC-V指令集可以划分为算数与逻辑运算,Load/Store操作,分支跳转操作,算数与逻辑运算包括一些立即数或者寄存器数的基础逻辑运算,算数的移位操作以及与或等逻辑操作,Load/Store操作包括存储以及读取半字全字等操作,分支跳转包括一些条件跳转和无条件跳转。从指令寻址模式上来讲,RISC-V指令集根据Function,操作码以及立即数或寄存器位置分为立即数寻址(操作数本身是外部给予的常数),寄存器寻址(访问的是对应寄存器),基地址寻址(一种特殊的寻址方式,将立即数与寄存器相结合找到相应的寻址位置)以及PC相对寻址(分支跳转指令根据当前PC以及指令中常量的值锁定所需要的寻址位置)。

图2-1 RISC-V四种寻址方式

按照译码结构来分,指令类型分为R型,I型,S型,SB型,U型以及UI型。表2-1为RISC-V的几种类型的指令格式。图中与表中IMM代表立即数,FUNC3和FUNC7代表指令的功能函数位,OP(op_code)代表指令的操作码,RS1,RS2代表指令的被操作寄存器地址,RD代表目的寄存器地址。

表2-1 RISC-V指令格式

在指令实现上,RISC-V相对于其他的RISC指令集支持更多的可扩展指令集,这给RISC-V处理器的用户针对性提高了很大的空间,比如一套应用在低端设备上的一款处理器内核,在使用ARM时其基础指令集必须带有不必要的乘法运算,此时RISC-V模块化指令子集的便利性即可体现出来,可以选择不支持M扩展,减少不必要空间以及性能浪费。同时RISC-V处理器在低功耗,向量指令集,硬件虚拟化加速方面等都有比较深入的设计。

1.1.2 RISC-V发展

目前随着RISC-V的发展,其形成由基础指令集,特权指令集以及扩展指令集三部分组成的整体。

表2-2 RISC-V基础指令集介绍

RV基础指令集具体含义基础指令集内容
RV32I32位整数指令集32位整数基本运算与基本的Load、Store指令,32个通用寄存器,共47条基础指令
RV64I64位整数指令集64位整数基本运算与基本的Load、Store指令,同时兼容32位的基础指令集,59条基础指令
RV32E32位嵌入式指令集通用寄存器只有16个的32位RISC-V基础指令集,共47条指令
RV128I128位整数指令集128位平面地址空间的RISC-V基础指令集的一种变体,草案中共71条基础指令

基础指令集会定义处理器的地址空间是32位或64位,以及在此基础上的基础运算指令,不同的基础指令集的通用寄存器的数目也会有所不同,其指令级架构具体包括RV32I,RV64I,RV32E以及RV128I。基础指令集与内容如表2-2所示。

表2-3 RISC-V特权指令集介绍

RV特权涵盖内容
USER特权特权性最低的特权模式,USER模式下只允许访问指定给普通用户模式的寄存器
Machine特权在Machine模式下,对内存、I/O 和所有的CSR都有着完全的使用权限
Supervisor特权Supervisor模式下,不可以使用机器模式的CSR,并且受到 PMP 的限制。使用基于页表的虚拟内存,这个功能构成超级用户模式的核心,确立RISC-V内存虚拟化的条件
Hypervisor特权Hypervisor模式下,在原来的三种模式下新增VS与VU两种特权模式,为RISC-V提供CPU虚拟化加速的硬件条件

特权指令集主要是对Machine[40],Supervisor(对虚拟地址与物理地址转换引起的存储空间虚拟化所制订的一种特权模式),Hypervisor特权(原H扩展指令集,能够对硬件虚拟化进行一定程度的加速,依靠Virtual模式下的状态直接访问规划的地址)以及其对应的状态控制寄存器,指令,虚拟地址与物理地址转换方式进行的系统规划。其内容如表2-3所示。

扩展指令集是在基础指令集上RISC-V官方提供的一系列特殊操作的硬件加速指令,包括能够执行原子操作的A扩展,分别能够执行单双浮点精度运算的F/D扩展,支持乘除法的M扩展,支持压缩指令即16位指令的C扩展,以及向其他高性能处理器看齐的密码学加解密运算加速的K扩展,矢量运算加速的V扩展,现如今RISC-V已经有几十种批准或者还在草案中的扩展指令集,这些可扩展的指令集构成RISC-V模块化设计的基础。其内容如表2-4所示

表2-4 RISC-V一些典型的扩展指令集

RV扩展指令集具体含义扩展指令集内容
GM,A,F,D,C扩展集合包含M乘除法指令扩展,A原子操作指令扩展,F,D分别32与64位浮点指令扩展,C为16位压缩指令扩展,共117条指令。
B位操作扩展对位的插入,提取,漏斗位移,字节置换等操作的指令扩展。
KCryptography密码学相关扩展包括SM3,SHA256等哈希算法的硬件加速,AES等加解密算法的硬件加速指令,必须支持B扩展。
VVector矢量扩展RISC-V自身的矢量架构,虽相对于SIMD有更少的指令数量,但仍然提供大量可供选择的向量操作,并且提供全新的CSR组与向量运算指令。

1.2 流水线结构

流水线思想是上世纪有关于处理器设计思想的一次较大的进步,流水线设计思想来源于汽车等制造业领域,在处理器内核中,将每一条指令分成多个步骤来执行,分步的操作为在其中插入分割开的寄存器,在将组合逻辑分割开后,在每一段都满足相应寄存器的建立时间与保持时间的同时,可以得到更短的时间周期,让处理器在更高的主频上工作,由此来提升性能。

1.2.1 经典五级流水线

以MIPS经典五级流水线举例,五级流水分别为取指(Instruction Fetch),译码(Instruction Decode),执行(Execute),访存(Memory Access),写回(Write Back)。

图2-3 经典五级流水线

首先取指是将指令从下一级存储结构中取出,译码是指根据当前的指令翻译成对应的操作,执行是指执行翻译出的逻辑运算等操作,访存是指将执行之后的结果重新存放到下一级的存储结构当中,写回是指将指令执行的结果写入到寄存器中。RISC-V的处理器也是在此基础上进行扩展与优化的。由于RISC-V的基础指令集存访操作相对于其他指令集较为简洁,所以从整体上来看一个RISC-V的超标量处理器通常将流水线划分为,若干级包括分支预测的取指操作,若干级包括重命名等消除数据相干性的译码操作,多个不等流水级的包括访存逻,辑运算等指令的执行操作,以及最后为了保证乱序执行顺序写回的退休与Commit操作。

1.2.2 乱序超标量处理器

超标量处理器是指一个周期能够同时发射和执行多条指令的一种处理器。从整体上来看,这种处理器结构为从取指开始将多条指令并行从存储器中取出,后续译码时也能够在同一个周期内完成这些指令的译码与执行,事实上译码通道由于不同指令类型出现的频率不同,并行的译码通道也可以不是完全相同的,而在执行级由于不同的指令执行的方式有很大的区别,即便是为并行逻辑运算加速采用两个ALU(Arithmetic and Logic Unit),因面积需要以及实际底层基础软件乘除法运算出现的频率较低(高频率的并行向量乘除等运算往往交给图形处理器或者一些专用神经网络加速器来运算),两个ALU在支持基础逻辑运算的基础上也可能一个只支持乘法运算另一个只支持除法运算,这些并行运算通道的优化方式可以在大幅度提高处理器的ILP(Instruction Level Parallelism)和IPC的同时,保证处理器的面积与功耗平衡。

图2-4 典型超标量处理器架构

通常高性能处理器往往支持指令的分支预测,由于为了提升处理器的性能对流水线级数逐渐扩展,而处理器大量存在的分支跳转指令会使流水线冲刷,指令的分支预测是解决被冲刷掉过多的流水级中的数据问题,同时指令并行与乱序执行会增加取指与译码的设计深度,从而导致执行级在多流水级的处理器中更加靠后,所以会造成长时间的气泡(Bubble)问题。分支预测的作用是将可能出现跳转的指令提前甄别,并对指令的可能的跳转地址做出预测。通常分支预测分为静态预测和动态预测,静态分支预测是根据处理器固有算法进行与此,动态分支预测是跟据指令过去的执行结果,对接下来的指令进行预测,目前的超标量处理器往往是多种分支预测器共同协作执行完成预测。

而乱序超标量处理器中的乱序,是指由于指令执行的通道有限,如果按照顺序执行的逻辑,有些指令往往会在执行过程中遇到执行通道的阻塞,因此为不阻塞后续指令的执行,处理器可以将一些与此指令不相关的指令提前执行,这种非固定顺序的指令执行方式即为乱序执行,本文后续将在第三章对乱序执行操作做出详细的说明。

1.2.3 多核处理器

多核处理器是指在一个SoC内部集成多个处理器内核,这样种设计方法主要是在执行程序时应对多任务情况下,不用在同一个处理器核心来处理,显然这种方法能够大幅度提升处理器集群的效率。但这样会产生一个问题是两个处理器同时或者先后较短的时间对同一地址数据进行修改,这样会造成在两个处理器的私有Cache中以及共享的其他存储单元结构数据不一致,此种缺陷即为Cache一致性(Coherence)问题,后续将在第四章对这一部分进行详细的说明。为根本上绕开Cache一致性的问题,同样本质上都是对单周期执行指令的数目提升,延续超标量处理器的设计思想,最大化单核的处理器能力,能否直接在同一个处理器核心中增加更多的单周期发射指令数目?这种设计思想会引起新的问题。首先,大量增加处理器的单周期发射指令数目,与之前提到的每一个发射与执行通道都是有所不同,一个三发射的处理器,通常有七八个并行的执行通道,而提升发射数目会造成执行级大量的并行通道才能达到相应的等价性能需要,并且在执行分支跳转指令时也需要舍弃更多的指令,引起更多不必要的气泡。此外,对单核性能的极致追求,会导致芯片的局部温度过热,所以将处理器内部的并行化设计迁移到核外,这样即减小了散热,也提高了处理器的内部执行能力。

并行多核处理器架构也有各种分类方式,比如根据处理器集群的处理器内核是否相同,分为同构多核处理器与异构多核处理器,异构多核处理器通常采用大小核模式,虽然没有同构处理器的较强计算能力,但在功耗管理单元(PMU,Power Management Unit)的控制下能够提供最大化的能效比,所以在一些可穿戴设备上有着广泛的应用,需要说明的是,在主流PC与手机上的处理器异构设计,是对大小核处理器集群组成的簇与GPU放到一个一致性单元与共享Cache组成的子系统当中的一套NoC,是集群层面的异构,不是处理器内核层面的异构,此处不再赘述。在根据Flynn的分类方式,根据处理器之间路由拓扑结构的指令与数据流执行关系进行分类包括SISD(Single Instruction Single Data),SIMD(Single Instruction Multiple Data),MIMD(Multiple Instruction Multiple Data),多核处理器设计思想主要是对MIMD的延续。

图2-5 Flynn对多核处理器分类方法

MIMD主要涵盖了Multi-Processors和Multi-Computers,Multi-Computers即为上文中提到由多个簇共同集成在一个次级一致性与Cache系统当中,除此主要对其中的Multi-processors分类进行讨论,Muti-processor主要可以分为UMA(Uniform memory access),NUMA(Non-Uniform memory access)以及COMA(Cache-Only memory access)

图2-6 三种多核处理器设计方法

在一套UMA系统中,所有的处理器共同享用一组CSM(Centralized Shared Memory),所有处理器内核访问该下一级存储单元时间基本相同,每个处理器内核都有自身的私有Cache,与此同时其他控制结构以及其他外设(DMA等)对共享存储单元的访问能力也基本相同,这种结构即为上述提到的同构多核处理器,也叫对称处理器(SMP,symmetric multiprocessor),这种处理器常见于各种CPU的设计,玄铁C910便为一个典型的SMP。

同样,如果是在多核处理器中,每个处理器内核访问下一级存储单元结构的时间有所不同,则称为NUMA系统,NUMA系统提供一组DSM (Distributed Shared Memory),不再有一个大块的存储空间共所有处理器访问,而是在每一个处理器都有单独访问下一级存储单元的访问窗口,但与私有Cache不同的是,这些依附在处理器内核旁的存储结构也能够被其他处理器内核访问到,因为这些存储单元地址是被其他处理器内核所共享的,但访问本地的存储单元要相对于访问远端的存储单元结构用时更短,这种设计方法往往可以更简单得约束处理器的布局布线,而除了一些CPU会采用这种设计方法,存算一体芯片也是对这种设计思想的延伸。COMA是一种直接嫁接在下一级Cache上的特殊NUMA,将NUMA的本地存储单元结构替换为智能访问次级Cache但更为方便的Directory记录Cache Line的信息。

1.2.4 C910处理器架构

由于处理器整体设计是基于玄铁C910,本节将对C910整体架构做出基本的介绍,C910整体上来看包括多核共享部分的单元结构,以及单核部分的单元结构。

图2-7 玄铁C910处理器架构

首先从多核共享的单元结构上分析,主要涵盖L2-Cache与CIU(Coherence Interface Unit)组成的多核存储单元共享系统,其主要负责不同处理器内核的数据交互与Cache一致性判断;PMU以及通过EDA工具自动生成的电源控制相关组件构成的电源管理系统(如隔离单元等);以及有JTAG(JointTest Action Group),Debug模块以及其他后期通过DFT(Design For Test)工具生成的组件构成的测试勘误系统;最后还有作为从设备接口与每个处理器内核相连的ACE总线接口,以及作为主设备与其他外设和SoC控制单元相连的AXI总线接口共同组成的双端总线接口。

从单个处理器核心上,处理器包括MMU(Memory Management Unit),IFU(Instruction Fetch Unit),IDU(Instruction Decode Unit),RTU(Retire Unit),用以处理特权指令以及控制寄存器信息的CP0以及包括ALU,LSU(Load & Store Unit)等各个模块组成的执行单元。

MMU主要提供对指令的虚拟地址和物理地址进行转换的操作,通过内部的两级类似Cache结构的TLB(Translation Look-aside Buffer)用以记录内存整块的物理地址与虚拟地址转换关系,这种关系不是类似于Cache之间单条指令的转换,而是对物理空间舍弃低位的信息记录,这样能记录整块大面积的存储空间与对应转换关系方便空间管理与内存的虚拟化,其转换关系遵循RISC-V官方的SV39标准,其为39位的虚拟地址页表映射到64位的物理地址页表表项,表项中除了含盖PPN(Physical Page Number)以外还包括一些如Dirty,Valid等关键位。

IFU完成包括指令取指分支预测等功能,其共包括三级流水,内部的BTB(branch target table)会记录过往指令从Cache中取出的Tag信息以及其对应的分支跳转目标,而BHT(branch target table)用来记录分支条转的历史信息,之后根据过往同地址指令的执行信息对接下来的跳转指令做出可能性的判断。除此之外取指单元还包括短循环加速器(Loop Buffer)与指令缓冲器(Instruction Buffer),分别用以对程序中的短循环内部指令存放用以加速和暂时存放受阻塞的指令。

IDU除了主要执行正常的指令译码单元以及寄存器重命名的相关内容。其共包括四级流水线,指令的初次译码会被翻译成微操作,译码转译成微操的方式共有四种分别为常规指令,一条指令对应一条微操作,Fence相关指令,包括RISC-V自身的Fence指令与一些包括低功耗电源管理等相关的控制寄存器操作,长分割指令与短分割指令,长分割指令主要包括原子指令等译码出3-5条微操作,短分割指令主要包括条件跳转等译码出的2条以内的微操作。根据这些译码方式共用三条译码通道,其中只有一条能译码长分割指令,剩下所有的指令都可以在各个译码通道译码,除此之外IDU还包括一部分与乱序执行算法先关的重命名单元,有关于寄存器重命名与RTU的相关问题将会在第三章详细说明。

图2-8 处理器流水线与关键单元关系

指令执行单元包括用以执行数据的加载与存放的LSU,LSU与需要对MMU进行地址翻译,地址翻译的流水线与访存的流水线是并行的,并且在将半子,全字双字的数据从D-Cache当中存放或读取时需要对比较Tag来判断是否命中,以及后续是否对相关的Cache Line标记Dirty。除此之外执行单元还包括两个并行的处理浮点数据的FPU(Float Processor Unit),一个基本逻辑外仅乘法支持的三周期ALU,一个基本逻辑外仅除法支持的可阻塞ALU,以及分支跳转指令执行单元的BJU(Branch&Jump Unit)。如图2-8展示了处理器的完整流水线划分,虚线包裹的部分是在本次优化过程中重点优化的模块单元。

1.2.5 流水线优化总览

由于在取指模块最多从I-Cache中取出128位的指令宽度,因此其最多可以支持4条32位宽度的RISC-V指令,对原设计的仿真验证可以得到译码级出现1-4条指令的频率分别为9.9%,11.8%,78%,0.2%,在发射队列的占用率上,以AIQ为例,其最低位表项(AIQ0)是最高位表项(AIQ7)的40倍。因此,可以得出结论优化流水线并行宽度可以大幅提高执行管道的利用率以及单周期的指令执行率,进而提升处理器性能。但由于处理器单周期可执行的微操作数目提升,虽然能够一定程度上提升取指单元的Buffer结构利用率,但在D-Cache端访存指令出现的频率更高会导致其类缓冲器电路结构更容易发生阻塞,因此对应的需要提高访存单元的类缓冲器电路结构深度。流水线整体优化主要对发射通道进行扩展,由原来的三发射通道优化为四发射通道,主要优化的模块单元有IFU,IDU,RTU等模块单元,在IFU当中将每周期从I-Cache取出的指令由三条增加到四条,同时对四条指令进行预译码与分支预测。在IDU中实现单周期的四译码五微操作,以及对应的寄存器重命名对应关系。在RTU当中实现了ROB的Commit与Create通道宽度扩展,以及与重命名后的寄存器映射通道关系的扩展。除此之外还对指令折叠等局部逻辑也进行对四译码五微操作方向上的优化设计。

1.3 本章小结

本章主要对RISC-V指令集以及其发展进程做出相应背景介绍概括,之后对流水线的工作原理,以及在流水线技术基础上高性能处理器的设计方法与常见技术,包括分支预测,乱序执行,超标量并发执行,多核处理器设计等,做出阐述。在此基础上以玄铁C910架构为例,对各个模块的作用以及上述的高性能处理器中常见技术加以结合。最后,总结归纳了在三发射到四发射的流水线优化设计过程中,对整体的总览与相应流水线各个模块的优化方法。

  • 15
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值