MIPSアーキテクチャー
読み:ミップス-アーキテクチャ
外語:MIPS architecture

 かつてのMIPS Computer Systems, Inc.によって設計、開発されたRISCプロセッサーのアーキテクチャー。
目次

概要
 MIPSは命令実行速度の単位MIPSでもあるが、MIPSアーキテクチャーのMIPSはMicroprocessor without Interlocked Pipeline Stages(インターロックされるパイプラインステージのないマイクロプロセッサー)の頭字語とされ、その当初の設計思想を表わしていたとされている。
 但し、実際のMIPSアーキテクチャーは当初の設計思想と異なり、インターロックが存在する。
 当初のものは32ビットマイクロプロセッサーで、後に64ビットマイクロプロセッサーが登場した。
 MIPS Computer Systems, Inc.は、後にSGIに買収されMIPS Technologies, Inc.に改名し、そして2012(平成24)年11月、MIPSアーキテクチャーの特許の幾つかと共に会社がImagination Technologiesに売却された。

特徴

採用例
 主として組み込み機器で広く使われている。
 例えばゲーム専用機でも採用され、PlayStationNINTENDO64などで使われた。一方でスマートフォンなどの分野は対抗のARMアーキテクチャが優勢であり、MIPSアーキテクチャーはマイナーである。
 国産ロケットのH-IIAロケット/H-IIBロケットや、人工衛星や探査機(はやぶさ2など)も、MIPSアーキテクチャーのHR5000が使われている。

命令セット
 MIPSアーキテクチャーは複数の命令セットを持ち、後方互換性を持つように規格化されている。
 この他に、SIMD命令セットなどの拡張命令セットが幾つか存在する。知られる範囲では次のようなものがある。

ライセンス提供
 現在、MIPSアーキテクチャーはライセンス提供されており、サードパーティが実際のプロセッサーを開発している(対抗となるARMアーキテクチャも同様)。
 当初はデスクトップ向け需要もあったが現在はなく、主として組み込み向けで使われている。ただし、MIPSを利用したスーパーコンピューターは存在する。

設計思想

有史前
 4004から始まったマイクロプロセッサーは当初、一つの命令の解読から実行まで全てが終わるまで、次の命令の解読に着手できなかった。
 やがてパイプラインが開発され、処理をステージという単位に分ける手法を導入することで実行中に次の命令の解読が可能となり、効率が向上した。
 しかし、除算命令や乗算命令のような処理に時間の掛かる命令があった場合、処理が間に合わないため一旦次の命令の取り込みなどを停止せざるをえず、このようにパイプラインの動きを一時停止させることをインターロックという。当然、インターロックしている時間ぶんだけ、処理速度のロスとなった。

初期
 MIPSは、いかにしてこのパイプラインのインターロックをなくすか、というスタンフォード大学での研究から生まれた。
 初期の研究では、除算命令や乗算命令のような複雑な命令をなくし、1クロックで実行できる単純な命令のみとすることが想定された。除算や乗算の実現にたとえ多くの命令が必要になったとしても、インターロックされないパイプラインで効率的に処理できれば、結果として高速化できる、という考え方であった。
 それでも分岐命令のように2クロック以上を要する命令の存在は避けられないが、これは遅延スロットによって解決された。
 このように、命令の単純化、パイプラインの最大限の活用、実行順序を少々無視した遅延スロットとこれを有効活用できるコンパイラーの性能向上への期待、といったものが、RISCとしての基本的な考え方となった。

製品化
 MIPSアーキテクチャーとして最初の製品はR2000であり、1986(昭和61)年に発表され、モジュールとして発売された。翌1987(昭和62)年からはチップ単体での発売も開始された。
 この当時はデスクトップ市場でも使われており、競合相手としてDECのVAXマイクロプロセッサーやモトローラのMC68000、およびパーソナルコンピューター分野のi386などが存在していた。
 ただしこの製品としてのMIPS、R2000は、スタンフォード大学で当初標榜された「インターロックのない」設計思想とは違い、インターロック機能を持っていたほか、除算命令や乗算命令も搭載されていた。
 実用的なマイクロプロセッサーを作ろうとすれば割り込み処理など時間の要する処理は必要不可欠で、ここでインターロック機構も必須となる。どのみちインターロックがあるなら時間の掛かる除算命令や乗算命令があった方が良い、という現実的な結論に至ったようである。

技術

レジスター
 汎用レジスターは、MIPS I ISA(命令セット アーキテクチャー)とMIPS II ISAでは32ビットであり、MIPS III以降は32ビットと64ビットの動作モードが存在する。
 汎用レジスターのうち、GPR0、GPR1、GPR26、GPR27、GPR29、GPR31は、CPUまたはOSなどで用途が固定されている。

汎用レジスター
 汎用レジスターで用途が決まっているもの。
 GPR0は、値0にハードワイヤードされており、読めば常に0、書いても無視される機能を有する。

フラグレジスター
 MIPSアーキテクチャーには、フラグレジスター(ステータスレジスター)が存在しない。
 条件分岐は、レジスター間の大小などの条件を直前に演算して結果をレジスターに格納し(通常はGPR1を使う)、分岐命令は指定されたレジスター内容が0か非0かで分岐するかどうかを決めるからである。
 分岐条件を直前に求めない処理というのは稀で、通常のプログラムはほぼ例外なく分岐命令の直前で分岐条件を求める。そのためだけにステータスレジスターを追加することはパイプラインの設計を無駄に複雑にするため、パイプラインをいかに効率的に使うかが根底にあるMIPSの設計思想と相容れなかったということのようである。結果として、MIPSアーキテクチャーでは分岐条件に汎用レジスターを使う。
 また、他のCPUにはある、キャリーフラグやオーバーフローのフラグ等も無いが、これらは例外を発生させることで通知する。通常はOSがこれをトラップし、あらかじめ登録しておいたユーザープログラムに制御を戻すことでその対応をすることになるが、これは処理速度の大幅な低下を招くため、通常はオーバーフロー等を発生させないようプログラミングをすることになる。

命令
 MIPSの命令は、R形式、I形式、J形式の三種類の分けられる。
 いずれも、32ビット長の命令語のうち、先頭6ビットがオペコードとなっている。
 残る26ビットがオペランドとなる。分岐命令であればそのアドレスである。レジスターであれば1オペランドごとに5ビットとなり、4つのレジスターを指定してもまだ6ビットが余る計算である。このため、4レジスターと残る6ビットにオペコードを追加したり、2レジスターと残る16ビットで即値を指定したりすることがある。

再検索