FPGA開発日記

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

アウトオブオーダのCPUを作ろう - 性能向上作戦あれこれ(RSキュー深さ解析) -

趣味でアウトオブオーダのCPUを作っている。アーキテクチャとしては、一番良く知っているMIPSだ。 現状の構成は以下の通り。4命令同時デコード、整数系は2命令同時演算可能、分岐命令とロードストア命令は別々に発行キューを持っており、アウトオブオーダ発行可能な形のCPUだ。

f:id:msyksphinz:20150215030801j:plain

これだけ巨大なものを作るのだから、性能もそれなりでなくてはならない。周波数を出すことは、FPGAで構成する限り不可能だが、どうせならサイクル性能でARMとかにも負けないものを作りたい。

と、いろいろ試行錯誤しているのだが、ベンチマークスコアはなかなか上がらない。 (まあアウトオブオーダプロセッサを作るのが初めてなので、作りかたもいろいろまずいところがあるのかも知れないが...)

とりあえずいろんな構成でベンチマークを取って、どれくらい性能向上するかを観測中。

f:id:msyksphinz:20150215030806j:plain

まず気になったのは、分岐命令の命令発行キューを最初は1本にしていたのだが、それだと基本的に常に一杯でデコーダ側を圧迫してしまうということ。 現在4命令同時デコードだが、隣接する命令に分岐命令が存在すると、前の分岐命令が掃けるまで、次の分岐命令をRSに入れることができないため、次のデコードを投入できない。 (現在は、4命令が全て発行キューに入らないと、次の4命令を取ってこれないようにしている)

ALUとメモリアクセスは8命令、4命令を貯められため、基本的に使い潰すことはないが、分岐命令を1つしか格納できないのは性能的に影響があった。

という訳で、分岐予測の発行キューを1本から2本にしたのが、表の3行目と4行目の違いだ。 CMK値が1.32から1.35へと向上している(微妙だなあ...)