R4000

R4000の最新ニュースをまとめて検索!

R4000は、1991年にリリースされた初の64ビットMIPSアーキテクチャRISCマイクロプロセッサである。 R4400は、R4000の内蔵キャッシュ容量を増やした改良版である。

R3000に比較して、以下のような強化がなされている。

  • FPUを内蔵
  • 64ビット対応のレジスタセットと命令セット
  • 8段のパイプラインで、システムクロックの倍のクロックで動作する(スーパーパイプラインと呼称)。
  • 動作周波数(内部)は100MHzと150MHz(後に200MHzと250MHz版が出ている)
  • 二次キャッシュメモリをサポート(最大 4Mバイト)
  • マルチプロセッサ対応の命令とキャッシュ

ただし、内蔵キャッシュは命令 8Kバイト、データ 8Kバイトであり、R3000よりも小さくなっている。ほとんど間をおかずに内蔵キャッシュ容量を倍増したR4400をリリースしている。 スーパーパイプラインの割りには動作周波数が低く、スーパースカラも採用していなため、他社CPUに遅れをとるようになった。これは自社工場を持たず、設計と製造が分離されたことによるオーバーヘッドによるものと見るものもある。 その後、R10000などにより、第一線級CPUファミリーへの復帰を図ったが、ある程度先端的なラインと製造技術を要求するため、製造できるメーカが限られる結果となり、競争力をさらに低下させる遠因ともなった。

とは言うものの、R4000/R4400はワークステーションやサーバに広く使われた。また、派生品の R4100、R4300、R4600などは組み込みシステムで多く使われている。

uPD30400RJ-40 VR4000PC-40(R4000PC-40)
TC86R4400MC-200(R4400MC)

目次

[編集] アーキテクチャ

R4000/R4400は、パイプラインの段数を8段にしてひとつのステージの処理量を減らし、動作周波数を向上させた(スーパーパイプライン)。プロセッサのアーキテクチャ上の改善は実はそれだけであり、分岐予測アウト・オブ・オーダー実行投機的実行レジスタ・リネーミングもこの段階では全く採用されていない。それよりも、設計上の主眼はマルチプロセッサ対応機能のサポートと64ビット化に置かれている。 R4000/R4400はバリエーションとして以下のものがある。

  • R4000PC/R4400PC 二次キャッシュへのインターフェイスを削除してピン数を減らしたバージョン。
  • R4000SC/R4400SC 二次キャッシュを接続可能なバージョン。
  • R4000MC/R4400MC マルチプロセッサ対応インターフェイスを備えたバージョン。

細かい機能の改善点としては、以下のような点が上げられる。

  • branch likely 命令の追加。条件分岐命令では次の命令が必ず実行された上で分岐すべき状態ならば分岐していた。branch likely命令では分岐するときだけ次の命令を実行し、分岐しないときは実行しないという動作をする。これを使うと、分岐先を2命令先にしておけば、実質的に分岐で実行されるのは次の命令だけとなり、パイプラインを乱さずに条件付動作を実現できる。
  • 浮動小数点演算では、平方根を求める命令が追加された。
  • TLBは 48エントリと減っているが、1エントリで物理ページを2ページマップすることができるようになっている。したがって、実質的には96エントリに増えているとも言える。
  • また、ページサイズが4Kバイト固定から、4K~16Mバイトまで可変となった。たとえばX Window Systemのサーバプロセスがフレームバッファを16MバイトのページでマップすることでTLBの浪費を防ぐことができる。

[編集] 64ビット・アーキテクチャ

R4000/R4400の64ビットモードでのメモリマップ

64ビットモードでは、汎用レジスタが全て64ビット幅となり、アドレスに関連する情報を格納するCP0レジスタも64ビット化された。各種演算は64ビット版が用意されている。物理アドレスは36ビット幅すなわち64GBとなっている。また、特筆すべきは特権モードとしてカーネルモードとユーザモードの中間のスーパーバイザモードが導入された点である。仮想アドレス空間は64ビットとなっているが、実はフラットではない(右図参照)。この図の中で xkphys は説明が必要であろう。xkphys は物理空間をTLBを使わずにマップしているが、サイズは物理空間 64GBよりもずっと大きい。これは、従来の kseg0kseg1 を拡張したものであり、キャッシュコヒーレンシ(後述)をどういう方式で保つかによって物理空間を多重にマップしているためである。xkphysにカーネルをおく場合、キャッシュコヒーレンシの方式(プロトコル)によってアクセスすべきアドレスが異なる。

[編集] マルチプロセッサ対応

マルチプロセッサをサポートするにあたって、重要な点のひとつはキャッシュコヒーレンシである。R4000MC/R4400MCでは、スヌープ方式が採用されており、無効型(MESI)プロトコルも更新型(MOESI)プロトコルも選択できるようになっている(MESIプロトコル参照)。

もうひとつ、マルチプロセッサで重要となるのは、並行して動作するスレッド間の同期をとる機構である。MIPSでは以下のふたつの機構で同期をとる。

sync命令 はメモリアクセスの順序性を保証する。たとえば、あるデータを更新したら、更新完了を示すフラグを立てるとする。その順番がTLBやキャッシュの状態に左右されて期待した順番にならないと更新していないものが更新されたように他のプロセッサから見えてしまう。これを防ぐのがsync命令である。まず、プロセッサXが次のようなコードを実行する。

  sw      t3, DT1
  li      t4, 1
  sync
  sw      t4, FL1

ここで、DT1が更新されたことをFL1で示す。一方プロセッサYは次のようなコードを実行する。

loop:
  lw      t5, FL1
  beq     t2, zero, loop
  nop
  sync
  lw      t6, DT1

これによって順序性を保つ。sync命令はマルチプロセッサでない場合でも、I/Oデバイスへの書き込み(通常キャッシュを使用しないが、プロセッサ内にストアバッファがあるので命令が完了しても書き込まれていないことがある)の完了を保証する目的で使うことができる。


ll/sc命令 ll命令(load linked)はロード命令として動作するが、その際にロードアドレスをCP0のレジスタ LLAddr に格納しておく。その後でロードした内容に変更を加え、sc命令(store conditional)で元のアドレスに書き込む。ただし、sc命令は以下のように動作する。

  • まずLLAddrに格納されているアドレスとストアしようとしているアドレスが同じかどうかチェックする。違う場合は失敗したとしてストア元のレジスタに 0 を格納して終了する。
  • 次に該当するキャッシュラインの状態をチェックする。これによって他のプロセッサがそのキャッシュラインに該当するメモリアドレスに書き込みを行ったかどうかがわかるので、もし書き込まれていたら失敗したと判断して、ストア元のレジスタに 0 を格納して終了する。
  • 成功すれば、メモリに書き込みを行ってストア元のレジスタに 0 以外を書き込んで終了する。

なお、LLAddr は例外が発生した場合もクリアされる。これを使うと、単純なスピンロックも、リーダー・ライターロックも実現可能である。スピンロックのコードは以下のようになる。

 Loop:
   ll        t2, (t1)       ; t1 の指すアドレスからロックワードを読み込む(0:未ロック 1:ロック済み)
   ori       t3, t2, 1      ; 1 を立てる
   beq       t3, t2, Loop   ; 1 が元から立っている場合はスピンする
   nop
   sc        t3, (t1)       ; 書き戻す
   beq       t3, zero, Loop ; じゃまが入った場合は最初からやり直し
   nop

[編集] バリエーション

  • R4200R4300i - 低価格/低消費電力版。二次キャッシュコントローラを持たない。NINTENDO64NEC製 VR4300 を使用。
  • R4600R4700 - Quantum Effect Devices (QED) の設計。二次キャッシュコントローラを持たない。UNIXマシン以外にシスコシステムズのルーターで使われた。
  • R5000 - スーパースケーラ方式で2命令同時実行可能。二次キャッシュを接続可能。

[編集] 関連項目

[編集] 外部リンク

最終更新 2009年9月16日 (水) 19:25 (日時は個人設定で未設定ならばUTC)。
【R4000】変更履歴

ご利用上の注意

もっと調べる!