FPGA開発日記

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

アウトオブオーダプロセッサの性能解析(アウトオブオーダ命令発行の性能解析)

自作CPUの性能解析およびリグレッションをしているのだが、アウトオブオーダ発行のところで少し怪しいところを見つけた。

命令発行スロットに格納された命令は、どのように発行されるのだろうか。

f:id:msyksphinz:20161228225153p:plain

一般的に命令発行スロットに複数命令が格納される場合、ここでデータのフォワーディングを待って命令を発行することになる。 このとき、スロットの先頭に入っている命令を発行すると考えると、例えば後段のスロットで命令発行Readyになったとしても、先頭のスロットの命令がまだ命令発行Readyになっていない場合、その命令は発行することが出来ない。

f:id:msyksphinz:20161228230426p:plain

f:id:msyksphinz:20161228232031p:plain

そこで、どのように実装したかというと、命令発行スロットのFIFOにポインタを持たせず、常にどの命令が発行できるかをチェックする方式に、若いスロットから順に発行するようにした。

f:id:msyksphinz:20161228232145p:plain

これによって命令発行を効率的に行えるようになるのだが、パタンによっては問題となる。例えば、同じスロットに次々と命令が入り、すぐにReadyになる場合、スロットの後ろに配置された場合、その命令がなかなか発行されない。

f:id:msyksphinz:20161228233034p:plain

これを抑えるためには、発行スロットにLRUのようなものを追加するしか無さそうだ。このあたりも実装していかなければ。