深度为4、16、32、64的BTB模型
BTB的模型如下,使用N来表示深度。当指令在BTB中匹配到相应的PC值的时候,就计为一次命中。
具体的实现可见源代码,进一步细节的注释也放在源代码中。
/*BTB的仿真模型*/
#include<stdio.h>
#define N 4
int main()
{
int hy_i[N], instr, addr, taken;
int i = 0, j, max = 0, ic = 0, hit = 0;
FILE *fin;//此部分读取文件
fin = fopen("history.txt", "r");
if(fin == NULL)
{
printf ("Failed to open the file !\n");
return 0;
}
while(!feof(fin))
{
fscanf(fin, "%x%x%d", &instr, &addr, &taken);
for(j = 0;j < max;j++)
if(instr == hy_i[j])//匹配到PC
{
hit++;
break;
}
if(j == max && max < N)//未匹配到且深度未满时,添加
{
hy_i[j] = instr;
max++;
}
else if(j == N)//未匹配到且深度已满,更新
{
hy_i[i % N] = instr;
i++;
}
ic++;
}
printf("N = %d, ic = %d, hit = %d, hit/ic = %f\n", N, ic, hit, float(hit) / float(ic));
fclose(fin);
return 0;
}