FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

自作RISC-V OoOコアの分岐予測性能解析 (RASの性能解析)

分岐予測は設計経験がないうえにいろいろ試行錯誤しながら作っているのだが、なかなか性能が伸びない。

とりあえず試行錯誤したバージョンは意外と性能が伸びていない。 RASのインデックスがずれてしまうのが問題のようだ。投機的にRASのインデックスが更新されてしまうので、それを上手く参照できていない。

JSONで取得している実行記録は以下のようになっており、まだまだパイプラインフラッシュが良く発生している状況だ。

"               24386" : {
  "commit" : {  "cmt" :   302,   "inst" :   999,   "dead" :   183  },
  "icache" : {  "request" :   752,   "hit" :   752,   "miss" :     0  },
  "dcache" : {
    "port[0]" : {    "req" :     0,     "hit" :     0,     "miss" :     0,     "conflict" :     0    }
    "port[1]" : {    "req" :     0,     "hit" :     0,     "miss" :     0,     "conflict" :     0    }
    "port[2]" : {    "req" :     0,     "hit" :     0,     "miss" :     0,     "conflict" :     0    }
    "port[3]" : {    "req" :   139,     "hit" :   108,     "miss" :     0,     "conflict" :    31    }
    "port[4]" : {    "req" :   286,     "hit" :   217,     "miss" :     0,     "conflict" :    69    }
    "port[5]" : {    "req" :   178,     "hit" :    98,     "miss" :     0,     "conflict" :    80    }
  },
  "branch" : {    "execute" :   266,     "cmp" : { "execute" :   156, "hit" :   141 },     "uncond" : { "ret" : { "execute" :    48, "hit" :    19}, "others" : { "execute" :    62, "hit" :    62 }},   },
}
"               28386" : {
  "commit" : {  "cmt" :   310,   "inst" :  1019,   "dead" :   202  },
  "icache" : {  "request" :   773,   "hit" :   773,   "miss" :     0  },
  "dcache" : {
    "port[0]" : {    "req" :     0,     "hit" :     0,     "miss" :     0,     "conflict" :     0    }
    "port[1]" : {    "req" :     0,     "hit" :     0,     "miss" :     0,     "conflict" :     0    }
    "port[2]" : {    "req" :     0,     "hit" :     0,     "miss" :     0,     "conflict" :     0    }
    "port[3]" : {    "req" :   122,     "hit" :    92,     "miss" :     0,     "conflict" :    30    }
    "port[4]" : {    "req" :   259,     "hit" :   211,     "miss" :     0,     "conflict" :    48    }
    "port[5]" : {    "req" :   164,     "hit" :   116,     "miss" :     0,     "conflict" :    48    }
  },
  "branch" : {    "execute" :   284,     "cmp" : { "execute" :   188, "hit" :   170 },     "uncond" : { "ret" : { "execute" :    44, "hit" :    12}, "others" : { "execute" :    52, "hit" :    52 }},   },
}

retの欄においてhit率が全く伸びない。BOOMの実装を読み直してもう少し確かめてみるか...