MIPSアーキテクチャ
[Wikipedia|▼Menu]

MIPSアーキテクチャ開発者ミップス・コンピュータシステムズ
ビット数64ビット (32→64)
発表1981年
デザインRISC
タイプレジスタ - レジスタ
エンコード固定
ブランチ条件レジスタ
エンディアンバイ
拡張MDMX, MIPS-3D
レジスタ
汎用31本 (32本中、『R0』は常に0 なので除く)
浮動小数点32本 (32ビットでは2本で倍精度を表す)

MIPSアーキテクチャは、ミップス・コンピュータシステムズ(現ミップス・テクノロジーズ)が開発したRISCマイクロプロセッサの命令セット・アーキテクチャ (ISA) である。
概要

MIPSは "Microprocessor without Interlocked Pipeline Stages"((命令)パイプラインのステージに「インターロックされたステージ」がないマイクロプロセッサ)に由来しており、R2000の頃のマイクロアーキテクチャの特徴からの命名である(が、その後そのような特徴が薄れていったのも、他のRISCと同様である)。MIPS値にも掛けている。

当初は32ビット幅のレジスタとデータバスを持つ32ビットの構成だったが、後に64ビットに拡張された。MIPSアーキテクチャには下位互換のある複数の命令セットが存在する。それぞれ、MIPS I、MIPS II、MIPS III、MIPS IV、MIPS 32、MIPS 64 と称する。現行版は MIPS 32(32ビット実装)と MIPS 64(64ビット実装)である[1][2]。MIPS 32 と MIPS 64では命令セットだけでなく制御レジスタについても定義している。

いくつかのアドオン拡張も用意されている。例えば、MIPS-3D は、3Dタスクで一般的な処理を行うための浮動小数点SIMD命令のシンプルなセットである[3]。また、MDMX (MaDMaX) は、より広範な整数SIMD命令セットで、64ビット浮動小数点レジスタを流用する。その他、MIPS16e は命令列を圧縮してプログラム格納域を小さくするための拡張である (ARMアーキテクチャのThumbエンコーディングに対抗したもの) [4]。また、MIPS MT は、米インテル社がハイパースレッディング・テクノロジーとして普及させた技術と同等の、マルチスレッディングに適した拡張である[5]

命令セットが非常にきれいなので、アメリカ合衆国ではコンピュータ・アーキテクチャを学校で教えるときに教材としてMIPSアーキテクチャを使うことが多い[6]。MIPSのデザインは、もうひとつの初期のRISCであるバークレーRISC(en:Berkeley RISC)と共に、後発のRISCに影響を及ぼした。

MIPSプロセッサは、SGIのコンピュータ製品群に使われていた。日本では、ソニーNEWS日本電気 (NEC) のEWS4800で使われた。また、米DEC社は、ごく短期間だけMIPSを使ったワークステーションを製品化していた[注 1]。また、機器組み込み分野で成功し、Windows CE製品、シスコシステムズルータープリンタのエンジンなどに使われた。ゲーム機分野でも成功を収め、NINTENDO64ソニー・コンピュータエンタテインメントPlayStationPlayStation 2PlayStation PortablePlayStation 3 (CECHA00/CECHB00 モデルのみ)でもMIPSアーキテクチャのプロセッサが使われた。1990年代後半、RISCマイクロプロセッサの出荷個数ベースで3分の1がMIPSアーキテクチャの製品だったと見積もられている[7]
歴史
RISCの先駆者

1981年、スタンフォード大学ジョン・L・ヘネシー率いるチームは、後に最初のMIPSプロセッサを生むプロジェクトを開始した。基本コンセプトは、命令パイプラインを深くすることで劇的に性能を向上させることである。IBM 801 などの研究や先例でこの手法はよく知られていたが、その可能性が完全に解明されていなかった。一般にプロセッサは、命令デコーダ、演算論理装置 (ALU)、メモリとやりとりするロード/ストア・ユニットといった部分で構成されている。パイプライン化されていない従来の「マイクロプロセッサの」設計では、1つの命令の処理を(ほぼ)完了させないと次の命令の処理を開始できず、内部ではほとんどの時間を処理に関与せずに待機するだけの回路が多くなる。これに対して「従来のマイクロプロセッサ」ではない、例えば1960年代のIBM 7030の頃には実現されていた命令パイプライン方式では、1つの命令の処理過程を複数のステージ(段階)に分割し、各ステージを順次、次のサブユニットに送って、複数のサブユニットがオーバラップして動作できるようにする。1つ目の命令の最初のステージの処理が終わると、次のステージの処理へ引き継がれると同時に、2つ目の命令の最初のステージの処理が平行して実行される。3つ目の命令が入ると1つ目の命令は3ステージ先、2つ目の命令は2ステージ先、3つ目の命令は最初のステージで、3つの処理が同時に行われる。すべてが最も効率的に動けば、複数に分割した処理過程の内容に関わらず、1ステージの処理ごとに1つの命令が完了できることになる。

命令パイプラインでは、乗算・除算命令のように命令の実行に長い時間がかかる場合、パイプラインに次の命令を取り込むのを待つ必要がある。この問題の解決策として、パイプラインの各ステージが処理中であることを示せるようにして、パイプラインをインターロックして、次の命令のステージが進行しないように止めなければならない。これがストールである。分岐命令を実行すると、後続の命令が途中のステージまで進行していたものを取り消さなければならず、ストールに加えて無駄となった処理時間分も加わる。これらがインターロックのロスとなる[8]。ストールが発生しインターロックがかかると命令パイプラインは足踏みするため、性能向上は望めないと考えられていた。MIPSの設計上では、すべての命令を単純化して実行処理が1クロックサイクル内で完了するよう計画された。そうできればインターロックをなくすことができる。

このような設計にすることで掛け算や割り算などの複雑な命令が1つの命令では実行できなくなるが、単純な命令だけであれば、プロセッサに与えるクロックを高速にでき早く動作させて、性能が向上すると予想された。また、インターロック回路を加えると半導体チップの面積(ダイサイズ)が増えて、クロックを上げることが困難になるため、クロックの高速化のためにはインターロックを排除することも必要だった。

複雑だが有用だった命令を排除することは議論の中心になった。多くの人が「複雑な掛け算を単純な多くの足し算にして、どうして速度が向上するのか」と、この設計手法、そしてRISC一般の謳い文句に懐疑的で誇大広告だと言った。しかし、これらの意見は、この設計における速度向上のポイントが命令の機能にあるのではなく、パイプラインにあるということを無視したものだった。時間のかかる処理にまつわる問題は、ディレイスロットで一応解決された。例えば、2クロックサイクルかかる命令があった場合、次の命令をディレイスロットとし、そこに、前の命令と依存関係の無い、つまり前の命令の結果を必要とせず、かつ前の命令に関わっているレジスタを使用しない命令を配置することで、パイプラインを止めないようにした。これを実現するためには、プロセッサに与える命令列を生成するコンパイラが、あらかじめ各命令ごとのクロックサイクル数を把握して、可能な限りディレイスロットを有効な命令で埋めるようにする必要があった。それでも大部分の命令は1クロックサイクルで実行できた。また、コンパイラ技術の進展はディレイスロットの活用頻度を向上させた。

初期のMIPSと並び、RISCの典型であり代表とされるバークレーRISC(英語版)(SPARCへの影響が大きい)と比べると、サブルーチンコールの扱い方が大きく異なる。バークレーRISCは頻繁に実行され性能への影響が大きいサブルーチンコールの性能向上を図るために、大きなレジスタファイルを持つと同時にレジスタ・ウィンドウというメカニズムを導入したが、それによってサブルーチンコールの入れ子段数が制限されている。サブルーチンコールは、それぞれのルーチンで専用に用いるローカルのレジスタ群を必要とし、その割り当てをハードウェアでサポートするということはチップにさらなるリソースを必要とし、設計も複雑化することを意味する。ヘネシーは、賢いコンパイラであればハードウェアでの実装に頼らずに使っていないレジスタを見つけ出すことができ、単にレジスタを有効利用できるだけでなく、あらゆるタスクの性能向上にも寄与すると考えた。

MIPSは最も典型的なRISCのひとつだとされる、というよりも、RISCの提唱者であるヘネシーとパターソンのそれぞれが設計した命令セット(命令セットアーキテクチャ)であるということを理由に、MIPSとバークレーRISCの設計が「典型的なRISC」だとされ、それらの特徴を以て「RISCの定義」だとされているためであり、「MIPSは最も典型的なRISC」だという言明はその逆になっている。

命令語のビット数を節約するために、命令数を抑えることで、命令フォーマット中のオペコード部として必要となるビット数を抑えている。基本オペコードは、命令語32ビットの中の6ビットを使用し[9]、残りの部分の構成の違いにより数種類の分類がある。命令語の残りの26ビットの部分について、26ビットの分岐先アドレスとする命令フォーマット、5ビットのフィールド4個で3つのレジスタとシフト値を指定し、残り6ビットを追加のオペコードとする命令フォーマット、2つのレジスタと16ビットの即値を指定する命令フォーマットがある。このような設計で、実行すべき命令と必要なデータ(オペランド)を1サイクルでロードできるようになった(正確には、必要なデータはレジスタの中にあるのであり、もし1サイクルで全てを揃えたいのなら特殊な技法が必要になる。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:93 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef