前回の解析で、なんとなく要因が分かってきたので、とりあえずの解決策を適用する。 つまり、ALUからのフォワーディングは直接データを受け取るように部分的に変更を加える。 それ以外のフォワーディング(LSUから、CSUから)などはフォワーディングを受け取らず、整数レジスタから直接読み込む。ALUのみフォワーディングデータを取り込むことで、回路面積の増加を最小限にしつつ、性能を最適化する。
これにより性能低下の問題はほとんど解決した。 しかし、フォワーディングパスを一部受け入れているという問題がある。
これを完全に除去したいということを考えると、やはりSTQによるデータレジスタ取得専用の短いパイプ来を持つことが考えられるのではないだろうか? つまり、個々のSTQがフォワーディング用のデータ受け取り口を持っているのはあまりにも大きいので、STQが各パイプラインからの予告Wakeupを受け取ると、データ受け取り専用パイプラインを通じてデータを取得する。 ここでのポイントは、各STQエントリがフォワーディングの論理を持っているのではなく、専用パイプラインのみがフォワーディングの論理を持っているので、回路面積を節約できる。 どうせフォワーディングパスなんで1サイクルではSTQエントリ1個程度しか駆動していないので、専用のパスにしても問題なさそうである。
最終的には、この最適化も入れていきたい。