R4000
マルチプロセッサをサポートするにあたって、重要な点のひとつはキャッシュコヒーレンシである。R4000MC/R4400MCでは、スヌープ方式が採用されており、無効型(MESI)プロトコルも更新型(MOESI)プロトコルも選択できるようになっている(MESIプロトコル参照)。
もうひとつ、マルチプロセッサで重要となるのは、並行して動作するスレッド間の同期をとる機構である。MIPSでは以下のふたつの機構で同期をとる。
sync命令 はメモリアクセスの順序性を保証する。たとえば、あるデータを更新したら、更新完了を示すフラグを立てるとする。その順番がTLBやキャッシュの状態に左右されて期待した順番にならないと更新していないものが更新されたように他のプロセッサから見えてしまう。これを防ぐのがsync命令である。まず、プロセッサXが次のようなコードを実行する。
ここで、DT1が更新されたことをFL1で示す。一方プロセッサYは次のようなコードを実行する。
これによって順序性を保つ。sync命令はマルチプロセッサでない場合でも、I/Oデバイスへの書き込み(通常キャッシュを使用しないが、プロセッサ内にストアバッファがあるので命令が完了しても書き込まれていないことがある)の完了を保証する目的で使うことができる。
R4000の整数演算部には、演算論理装置 (ALU)、シフタ、乗算器、除算器、ロードアドレス生成器がある。ALUには64ビットの桁上げ選択式加算器と論理ユニットがあり、パイプライン化されている。シフタは32ビットのバレルシフタで、64ビットのシフト命令を2サイクルで実行するため、1サイクルだけパイプラインをストールさせる。チップサイズを削減するためこのような設計を選択した。乗算器と除算器はパイプライン化されておらず、大きなレイテンシがある。乗算は10サイクル(32ビットの場合)または20サイクル(64ビットの場合)のレイテンシがあり、除算は69サイクル(32ビット)または133サイクル(64ビット)のレイテンシがある。ほとんどの整数演算命令は1サイクルしかかからない。ALUの加算器はメモリのロードまたはストア、分岐先アドレスなどの計算にも使われる。
R4000SC/MCは128KBから4MBまでの二次キャッシュをサポートしている。二次キャッシュには専用の128ビットのデータバスでアクセスする。二次キャッシュは命令用とデータ用を分離して実装することもできるし、統合して実装することもできる。後に命令キャッシュとデータキャッシュをそれぞれ128KBから2MBの範囲で実装可能となった。二次キャッシュは物理インデックス・物理タグ方式で、ラインサイズは128/256/512/1024バイトのいずれかを選択できる。キャッシュコントローラはR4000本体内にある。二次キャッシュには普通のSRAMを使える。データバスとタグバスはECCで保護されている。
R4200、R4300i - 低価格/低消費電力版。二次キャッシュコントローラを持たない。NINTENDO64 は NEC製 VR4300 を使用。
R4600、R4700 - Quantum Effect Devices (QED) の設計。二次キャッシュコントローラを持たない。UNIXマシン以外にシスコシステムズのルーターで使われた。
R5000 - スーパースケーラ方式で2命令同時実行可能。二次キャッシュを接続可能。