スーパースカラ

パイプラインハザードを克服したとしても、どうしても超えられないある限界がある。「1クロックの間に処理が完了するのは最大で1命令」という、構造上当たり前の壁だ。命令を1本のパイプラインに詰め込む限り、どれだけ段数を深くしようと二つの命令が同時に完了するわけは無い。「それならばパイプラインを複数本用意してしまえばいい」、これが「スーパースカラ」だ。スーパースカラを最大限に活用すればIPCを1以上にすることもできる。CPUの進化において、スーパースカラの採用は大きな壁を越えた一歩といえるだろう。
だが「最大限に活用」とは簡単に実現できるものではない。問題となるのはまたしても命令の順序である。命令Bの内容が「命令Aの結果の数値を2倍にする」という場合、Aの結果は分岐云々以前に全く予想が出来ないため、どうしてもAとBを同時に処理できない。そこで考案されたが「アウト・オブ・オーダー」である。「オーダー」はここでは「順序」を意味する。「アウト・オブ・オーダー」は文字通り「命令の順序を守らずに処理する」機能である。この場合、Bはひとまず置いておいて、その次のCをAと一緒に処理することでスーパースカラを無駄にせずにすむ。アウト・オブ・オーダーはスーパースカラには不可欠な技術であり、必ずセットで用いられている。
スーパースカラは現在のCPUにはほぼ採用されているが、パイプラインの細分化と全く逆の欠点を持つ。IPCが上がる代わりに、回路が複雑になるためクロックを上げにくくなるのだ。IPCとクロックのバランスを見極めることがCPU設計の肝となる。
可能なら書き直したいロークオリティ・・・めっちゃ削ったしなぁ。
〆切直前に仕様変更ありまくりだから仕様がない。(言い訳カコワルイ)
ちなみにGeodeはスーパースカラじゃねーのもあります。