开源处理器Rocket的分支预测机制研究与性能评估(一)

引言

RISC-V是加州大学伯克利分校(University of California at Berkeley,以下简称UCB)设计并发布的一种开源精简指令集架构,其目标是成为指令集架构领域的Linux,应用覆盖IoTInternet of Things)设备、桌面计算机、高性能计算机等众多领域[1]RISC-V2014年正式发布以来,受到了包括谷歌、IBMOracle等在内的众多企业以及包括剑桥大学、苏黎世联邦理工大学、印度理工学院、中国科学院在内的众多知名学府与研究机构的关注和参与,围绕RISC-V的生态环境逐渐完善,并涌现了众多开源处理器及SoC采用RISC-V架构。Rocket就是采用RISC-V指令集的开源处理器,本文研究分析了Rocket处理器中分支预测机制的实现原理,并对其性能进行了测试评估。

1 Rocket处理器简介

RocketUCB设计的一款基于RISC-V指令集、5级流水线、单发射顺序执行64位处理器,主要特点有:

  •  支持MMU,支持分页虚拟内存,所以可以移植Linux操作系统
  •  具有兼容IEEE 754-2008标准的FPU
  •  具有分支预测功能,具有BTBBranch Prediction Buffer)、BHTBranch History Table)、RASReturn Address Stack

Rocket是采用ChiselConstructing Hardware in an Scala Embedded Language)编写的,这也是UCB设计的一种开源的硬件编程语言,是Scala语言的领域特定应用,可以充分利用Scala的优势,将面向对象(object orientation)、函数式编程(functional programming)、类型参数化(parameterized types)、类型推断(type inference)等概念引入硬件编程语言,从而提供更加强大的硬件开发能力。Chisel除了开源之外,还有一个优势就是使用Chisel编写的硬件电路,可以通过编译得到对应的Verilog设计,还可以得到对应的C++模拟器。Rocket使用Chisel编写,就可以很容易得到对应的软件模拟器[2]。本文对于分支预测机制的性能评估就是使用编译得到的软件模拟器进行实验的。

2 GShare分支预测机制

分支预测是处理器用来提高执行速度的一种机制,其对程序的分支流程进行预测,然后预先读取其中一个分支的指令并解码,从而避免了流水线的空闲等待,也就相应提高了处理器的整体执行速度。但是,一旦分支指令结果出来表明前期分支预测是错误的,那么就必须将已经进入流水线执行的指令和结果全部清除,然后再装入正确的指令重新处理,这样会消耗处理器额外的时钟周期。所以提高分支预测准确率是一项十分重要的工作。分支预测可以分为静态分支预测、动态分支预测。GShare[3]Scott Mcfarling1993年提出的一种动态分支预测机制,也是Rocket处理器采用的分支预测机制。其包括BTBBHT两部分。对于一条指令首先查询BTB,如果命中,表示是分支指令,那么再查询BHT,预测分支是否发生,BHT的内容及预测机制如图1所示。

开源处理器Rocket的分支预测机制研究与性能评估(一)_第1张图片

将分支指令的地址取出n bit,与分支历史移位寄存器(BHSRBranch History Shift Register)的n bit进行异或运算,运算结果作为索引,查询模式历史表(PHTPattern History Table),PHT中使用的是2bit饱和计数器,其状态变化如图2所示。如果查询的结果是00或者01,那么预测分支不发生,如果查询的结果是10或者11,那么预测分支发生。根据分支指令实际运行结果更新BHSRPHT的相关内容。

开源处理器Rocket的分支预测机制研究与性能评估(一)_第2张图片


你可能感兴趣的:(RISC-V)