自作RISC-VプロセッサでCoremarkベンチマークを計測しているが、命令フェッチをどれだけ投機的に実行するかによって性能がずいぶん変わってきた。
投機フェッチは、命令バッファが空いている限り実行しているが、あまりフェッチを出しすぎると、パイプラインフラッシュによるフェッチ破棄を行った場合のペナルティが大きくなる。
命令キャッシュミスが発生しており外部に命令フェッチを出している場合、その命令フェッチを破棄することはできないので、フェッチが戻ってくるまで待機することになる。このペナルティが、以外と影響してくる。
そこで、命令バッファのサイズを変えて、どの大きさにするのが一番性能が出るのかを調査した。
Inst Bufferサイズ | サイクル数 | 比率 |
---|---|---|
2 | 406395 | 1.00 |
4 | 371580 | 0.91 |
8 | 403437 | 0.99 |
16 | 476439 | 1.17 |
やはりバッファのサイズを大きくすればよいわけではないらしい。かと言って、小さすぎると今度は投機フェッチが出せなさ過ぎている。
今回の実装は、命令バッファのサイズを4にしておくのがよさそうだ。今回の実装では1リクエストで128ビットをフェッチしてくるので、最大で128x4=512bit=16命令文を保持できる計算となる。