一种理想化的分支预测器,它开发一组线性函数,每一条程序路径都对应一个被预测的分支,将“taken”的分支与“not taken”的分支分开。所有这些线性函数合在一起构成了一个分段线性决策曲面。
分段线性曲面允许预测器学习某些线性不可分的分支行为,而这是以前的神经预测器无法学习的。
分支的线性可分性:
文献[1]中定义了线性可分分支的概念为:为全局历史中的最近 n 位,对于一个静态分支B,存在一个布尔函数能够预测分支B的行为,所有的预测器都是在学习这个函数。如果该函数时线性可分的,就说分支B时线性可分分支;否则,B是线性不可分分支。
由于有许多通向B的路径,每条路径对应一个用于预测分支B的线性函数,因此有许多不同的线性函数用于预测B。作为一个整体,用于预测B的线性函数形成了一个分段线性曲面。
1 理想化算法描述
变量描述:
W:一个三维整数数组,由分支地址、路径历史中分支的地址和在历史中的位置索引。可以将W看作一组矩阵,每个分支对应一个矩阵,其列对应于路径历史中的分支,其行对应于历史中的位置。W[B,0,0]是跟踪分支B的taken趋势的权重。该权重是B的偏置权重。每个权重8-bit。
h:全局历史长度。
GHR:全局历史寄存器。
GA:分支地址阵列,每个分支执行时将其地址存入该阵列。与GHR一同给出当前要预测分支的路径历史。
output:一个整数,表示当前分支的预测结果。
2 一个实际的分段线性分支预测器
在实际的实现中主要有两个限制:有限的面积和延迟。
- 限制数组 W 的面积开销:即限制三个维度索引的长度。将前两个索引取模两个整数n和m来限制它们,我们通过为历史长度选择合适的值h来限制第三个索引。
- 限制预测的延迟:通过提前流水线实现。
分支预测器中提前流水线
分支预测推测性地为当前分支未来 h 个分支计算部分计算。地址为B的分支的偏移权重现在保持在W[B mod n,B mod m,0]中,此时W数组由n模的分支地址索引。由于该索引事先未知,该算法保留n个推测预测器状态,以驱动n个可能的预测。一旦知道分支地址,它将用于选择n个预测中的一个。
另外还需要数组SR[ i , j ],用于保持用于预测未来第 j 个分支的推测部分和,其地址模n为i(类似于Fast Path-based neural predictor中的做法)。
此时的预测算法如图6所示:
参考文献:
【1】Neural methods for dynamic branch prediction