您的位置:首页 > 运维架构 > 网站架构

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

2017-06-06 13:56 483 查看

引言

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

1 Rocket处理器简介

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

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

Rocket是采用Chisel(Constructing 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
Mcfarling于1993年提出的一种动态分支预测机制,也是Rocket处理器采用的分支预测机制。其包括BTB、BHT两部分。对于一条指令,首先查询BTB,如果命中,表示是分支指令,那么再查询BHT,预测分支是否发生,BHT的内容及预测机制如图1所示。



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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息