パイプライン化を行うと、適宜ストールを発生させる必要があります。特に、ストールの要因として大きな部分を占めるのは、分岐命令です。分岐命令の結果が確定するまで、次の PC がわからないことが原因ですが、「多分次の PC はこの値」と予測できれば、投機的に次の命令を実行することができます(投機的に、というのは「無駄になるかもしれないが、予測が当たれば(性能面で)得になる」というようなニュアンスです)。
分岐予測器は凝りだすと果てがありませんが、ごく単純な「常に分岐しない(次の PC は PC+4)と予想」「前回と同じ場所に分岐すると予想」などでも十分でしょう。凝った分岐予測器にチャレンジしたいとしても、それにいきなり手を出すのは推奨できません。まずは簡単な分岐予測器を作り、分岐予測ミス時にも正しく動作するような機構を正しく実装できたことを確信してから、分岐予測器を取り換えるのがおすすめです。
インオーダーのスーパースカラでは、既に実行可能な命令が後ろの方にあっても、前から順番に実行していかないといけないという制約の都合上、その命令を実行することができません。そのような場合、Exec Unit が遊んでいることになり、もったいないです。アウトオブオーダー実行できれば、そのような命令を先に実行することができ、遊んでいる Exec Unit が有効活用されるため、性能が向上します。
Exec Unit 以外はほとんど書き直しになってしまうので、実装量は多くなります。外から見た結果が、命令の順番通り(インオーダーに)実行した時と必ず一致する必要があるため、考えることがたくさんあります。