自作CPUの性能解析およびリグレッションをしているのだが、アウトオブオーダ発行のところで少し怪しいところを見つけた。
命令発行スロットに格納された命令は、どのように発行されるのだろうか。
一般的に命令発行スロットに複数命令が格納される場合、ここでデータのフォワーディングを待って命令を発行することになる。 このとき、スロットの先頭に入っている命令を発行すると考えると、例えば後段のスロットで命令発行Readyになったとしても、先頭のスロットの命令がまだ命令発行Readyになっていない場合、その命令は発行することが出来ない。
そこで、どのように実装したかというと、命令発行スロットのFIFOにポインタを持たせず、常にどの命令が発行できるかをチェックする方式に、若いスロットから順に発行するようにした。
これによって命令発行を効率的に行えるようになるのだが、パタンによっては問題となる。例えば、同じスロットに次々と命令が入り、すぐにReadyになる場合、スロットの後ろに配置された場合、その命令がなかなか発行されない。
これを抑えるためには、発行スロットにLRUのようなものを追加するしか無さそうだ。このあたりも実装していかなければ。