マイクロアーキテクチャ
パフォーマンスを向上させるための最も重要な、そしてもっとも強力な手法の一つは命令パイプラインを用いることである。初期のプロセッサの設計では、プロセッサは上記のステップのすべてを次の命令に移る前に実行していた。これでは回路の大部分が上記の各ステップで待機状態になってしまう。たとえば実行やそのほかの段階では命令でコードの回路は待機状態になる。
パイプラインは、一定数の命令がプロセッサ内で同時に動作できるようにすることで性能を向上させる。また同じ簡単な例では、プロセッサは最後の命令が結果が出るのを待っている間に新しい命令をデコード開始する(ステップ1)これにより、最大で4つの命令を同時に「動作状態」におくことができ、見かけ上のプロセッサの速度が4倍になる。どの命令も完了するのに同じ時間がかかるのだが依然4段階のステップがある)、CPUは結果として命令を大幅に早く片付けることができ、より高いクロック速度で動作することができる。
RISCでは各ステージをきれいに分割し、同じ長さの時間、すなわち1サイクルかかるようにすることで、パイプラインをより小さく、より簡単に構築できるようにする。プロセッサは結果として製造ラインのように、命令が片方から来て反対側から出て行くように動作する。
コンピュータのアーキテクトたちは、CPUの動作周波数とDRAMのアクセス時間との乖離に悩まされてきた。1つのプログラム内の命令レベルの並列化を利用した手法はいずれも、メインメモリからデータをフェッチする場合には長いストールを発生させる可能性がある。さらに、高度な命令レベル並列化のための膨大な数のトランジスタと高い動作周波数により発生する熱は、もはや安価に冷却できるレベルではなくなった。こうした理由により、新しい世代のコンピュータは、1つのプログラムやスレッドの範囲を超えたより高い次元の並列化手法を用い始めた。
このトレンドは「スループットコンピューティング」としても知られる。この考え方は、もともとはメインフレームの市場でオンライントランザクション処理が1トランザクションの速度ではなく、膨大な数のトランザクションを処理できる能力を強調したことに由来する。ネットワークのルーティングやWebサーバなどのこの10年で急速に増加したトランザクション的なアプリケーションに対して、コンピュータ業界は再び容量とスループットの問題を強調してきている。
並列性を実現する方法の一つはマルチプロセッシング、つまり複数のCPUを搭載したシステムを用いることである。
チップ製造技術の向上によってダイにより多くの回路を詰め込むことができるようになり、設計者がその使い道を探すようになったのはそれほど昔のことではなかった。もっともありふれた方法はダイにキャッシュをどんどん追加していくことだった。キャッシュは単純に高速なメモリであり、メインメモリと通信するのにかかる「長い」サイクルに対して数サイクルでアクセスすることができる。CPUはキャッシュの読み書きを自動化するキャッシュコントローラを搭載し、データがキャッシュ内に存在すればすぐに読み出すことができ、なければキャッシュコントローラが読み込む間プロセッサはストールする。
1980年代の中盤から後半に、RISCの設計でキャッシュを追加していくことが始まった。たいていは全体で4KBのみであった。この数字は時代を経て増え続け、今や典型的なCPUは約512KBのキャッシュを搭載し、よりパワフルなCPUは、1~2MBあるいは4~8MBさえ搭載し、複数のレベルのメモリ階層が構成されている。一般的にいえば、大容量のキャッシュは高速化につながる。
キャッシュとパイプラインはお互いにとって完璧な組み合わせであった。それまでは、チップ外のメモリのレイテンシより高速に動作するパイプラインを作ってもあまり意味はなかった。オンチップのキャッシュメモリを使用することは、パイプラインがキャッシュのレイテンシ、すなわちより短い時間で動作できることを意味した。これによりプロセッサの動作周波数を、チップ外のメモリの速度の向上よりもかなり早いペースで向上させることができた。