RISC(Reduced Instruction Set Computer、りすく)は、コンピュータプロセッサ命令セットアーキテクチャ (ISA) の設計の方向性として、命令セットの複雑さを減らすことすなわち、命令の総数や種類を減らし、それぞれの命令が行う処理を単純なものにし、命令フォーマットの種類を減らし、オペランドのアドレッシングを単純化する、などといった方向性により「命令セットを縮小して」設計されたコンピュータ(プロセッサ)である。この方向性が新しいものとして提案された際、従来のその逆の方向性を指すレトロニムとしてCISCという語が同時に提案された。

概要編集

この着想のひとつは、従来のプロセッサに備わっていた様々な命令の大部分が、実際のプログラムを書く際にはほとんど使われていないことが見出されたことにある。これは特に IBM 801 の開発に関して言われている。従来のプロセッサでは、複数の処理を一挙にこなす複雑な命令[注 1]をもち、また、個々の演算命令につき、任意のアドレッシングモードを組み合わせることが可能(直交性がある)である。だが実際に作成されたプログラムを解析すると、使用される命令はそのうちのごくわずかなものに限られることが判った。この調査結果に基づいて命令セットを簡潔にすることが試みられた。

先行例としての(1970年代の)IBM 801 に続いて、RISCの提案は、1980年代のジョン・ヘネシーデイビッド・パターソンによる。特に、801 は「チップに集積されたコンピュータ」ではなく、一方、ヘネシーとパターソンの提案は Mead & Conway revolution(en:Mead & Conway revolution)と呼ばれている当時のVLSI開発の機運という背景もあって、マイクロプロセッサとしての実装が前提となっている。

むろん、単に命令セットが単純なコンピュータという意味であれば、1950年前後の初期のコンピュータは必然としてほとんどがそのようなものであったし、ミニコンピュータの時代の例としてはPDP-8の洗練された命令方式が知られている。本来RISCかCISCかというのは方向性であって、どこかに線を引いて分類できるようなものではない。しかし、1998年に開催されたシンポジウム The 25th Annual International Symposium on Computer Architecture(ISCA '98)の講演集において、パターソンらの提案の再録に附されたretrospective(Retrospective: RISC I: a Reduced Instruction Set Computer doi:10.1145/285930.285941)で、以下のごとく指弾されているように、

One thing about the RISC vs. CISC debate is the revisionist history on what was CISC. The paper says the trend towards complexity was given by comparing VAX vs. PDP-11, iAPX-432 vs. 8086, System 38 vs. System 3. The VAX and the 432 were the ones that we questioned, and we think those concerns hold up pretty well today. The 8086 may have been inelegant, but it was not particularly complex, and this paper used it as the example of a simple machine. I think the trade press concluded that any commercial computer that wasn't a RISC must be a CISC, and hence the confusion.

「RISCにあらずんばCISC」と(誤った二分法で)決めつけた trade press によって混乱が齎された。その混乱に従って書かれた文献のほうが多いほどであり、ウィキペディアにおける出典に基づく記述もそのようなものである可能性がある(引用中にある、8086が(エレガントとは言い難いにしろ)元の文献において、例として比較として複雑ではない側で挙げられていた、という指摘は、それを端的に示している)。

特徴編集

RISCアーキテクチャの特徴として以下の要素が言及される。

固定命令語長[1]
命令の解読に際して可変長命令では命令長の判別と切り出し等に時間がかかっていた欠点を排除し、命令デコードに要する時間を短縮すると共に、命令の先読みをしてパイプラインの効率を上げる。
全ての演算は1クロックで実行する。
パイプライン動作にウエイトを生じさせない。初期のアーキテクチャでは処理に複数クロックを要する乗除算命令を省略し、乗除算の必要には複数の命令を組み合わせて実現した。
演算はレジスタ‐レジスタ間演算のみ[1]
回路構成の単純化を図るとともに、メモリ・アクセスのレイテンシがパイプライン動作に悪影響を与えるのを避ける。メモリに影響する命令はロード・ストア命令のみであり、通常メモリ上のデータへの明示的な演算は行われない。
ワイヤードロジックで構成する
マイクロコードによる命令実行(マイクロプログラム方式)を排し、命令実行に要するクロックサイクル数を削減するとともに、命令解析・実行を行う回路をゲートの組み合わせで実装し、高クロック動作を可能にする。
多数のレジスタを備える。
演算の途中結果をCPU内に蓄えられる様にして、メモリへのアクセスを減らし、メモリ・アクセスによるレイテンシで動作が遅延するのを避ける。
遅延実行スロットを備える
パイプラインハザードを避け、パイプラインの処理効率を上げる。

などが挙げられるが、例外も多い。

CISCではハードウエアでサポートされているスタック操作命令がRISCにはなく、スタック操作[注 2]などの処理は単純な命令を組み合わせて代替処理を行う。命令の組み合わせによって発生し得るパイプラインハザードはコンパイラでコード生成時に検出し、命令の順序を最適化することで回避する。排他制御などで不可欠なアトミック命令はRISCでもサポートされる。

命令語長を固定長にすることでパイプライン処理の処理効率を向上させることができるが、プログラムをコンパイルする際にパイプライン動作を前提とした最適化を行う必要があり、コンパイラ作成には高度な技術が要求される。

歴史編集

RISC設計思想編集

1970年代後半、IBMなどの研究で、実際に使用されているプログラムを解析したところ、複数の処理を一気に行う高機能な命令や、いわゆる直交性のある、命令とアドレッシングモードの組み合わせの大部分は実際のプログラムでは使われていないことが判明した。これは、プログラミング技法が、従来のバイナリコードを意識したアセンブリ言語の記述による低レベルのプログラミング形態から、高級言語で記述してコンパイラを使ってバイナリコードを得る形態に移り変わったことの副産物である。それまでに設計されたCPUの命令セットには、当初アセンブリ言語でプログラムを記述するうえで便利な命令が含まれ、やがてコンパイラでコード生成を行う前提で、高級言語の制御構文をそのまま実行できるように、複雑な機械語の命令も実装される様になった。だが、当時のコンパイラはCPUが持つ利点をあまり生かせていなかった。というのもコンパイラの開発は非常に高度な技術を要し、困難を伴うことだったからである。市場にはそれでもコンパイラが浸透していき、直交性の利点や、複雑な命令の利点は薄められていった。

もうひとつの発見は、複雑な処理を行う命令の所要時間と、単純な命令を組み合わせて同等の処理を行わせる場合の所要時間を比較したとき、しばしば前者が遅いということである。このパラドックスは、CPUの設計に許容される期間の制限から生じた。設計者は十分な時間を与えられず、全ての命令の処理を最適化することができずに、結果としてよく使われる命令の処理時間だけを最適化したのである。有名な例としてVAXのINDEX命令がある。この命令はループを使った同等機能のプログラムコードよりも遅かった。

一方で、メモリの速度よりもCPUの速度の向上が著しくなってきていた。1970年後半の時点でも、以後、CPUの演算速度が向上し続けるのに対してメモリアクセスの速度の向上は限定的であり、以後も速度差が拡大することが明らかだった。すなわち、今後10年の間にCPUの演算速度は相対的にメモリアクセスの10倍、100倍となってゆくのである。こうしてより高速化していくCPUの演算速度を維持するためにはアクセスまでの時間が短いレジスタを増やさなければならず、また、高速化するCPUと速度の上がらないメモリシステムの速度差を埋めるためにキャッシュを拡充しなければならないことは明らかだった。これら多数のレジスタやキャッシュを実装するための面積をシリコン上に確保する必要が生じた。これについてはCPUのアーキテクチャを単純にしてその面積を削減することで、レジスタやキャッシュの為の面積を確保できた。

さらにRISCアーキテクチャの別の優位性が、実際に使われているプログラムの解析結果からも明らかになった。アンドリュー・タネンバウムは様々なプログラムを集めて計測結果をまとめ、多くのプロセッサの備える仕様は、実際のプログラムで要求されるものより過剰であることを立証した。例えば、プログラム内の定数値のうち98%が13ビットに収まることを示したが、一方で既存のCPUのほとんどは定数値を格納するエリアのサイズとして8ビットの倍数にあたるサイズを用意していた。典型的には8ビット、16ビット、32ビットである。これが意味するのは、命令のビット・フィールド構成を適切に設計することで、命令に使用する定数を命令のオペランド・フィールドに格納し、メモリアクセスを減らすことができるということである。定数をメモリやレジスタから取ってくるのではなく、当該命令の中に格納することで速度を向上させることができる。一方で、これを実現するためには命令を表現するビット・フィールド幅を小さくする必要がある。さもなければ命令の中にそれなりのサイズの定数を埋め込むことができないからである。

これらの要素を背景に、アドレッシングモードと命令数を削減する、縮小命令セット (Reduced Instruction Set) という用語が生まれた。従来のアーキテクチャとRISCの本質的な違いは、全ての演算をレジスタ間で行い、メモリへの読み書きをレジスタとメモリの間の転送命令に限る点である。このためRISCはロード/ストア・アーキテクチャとも呼ばれる。RISCアーキテクチャの概念と対比して、従来の設計手法はComplex Instruction Set Computer (CISC) として知られるようになった。ただし、これはあくまでもRISCと対立する概念として捉えるときに使う用語である。また、RISCアーキテクチャと言われるCPUであっても、機種によっては巨大な命令セットを持つこともある。

RISCの設計思想は命令セットを縮小することにある。この副作用として、命令を識別するのに必要なビットフィールド幅が小さくできるため、命令内にオペランドデータを直接含ませる余地が生じ、レジスタやメモリを使わずに済む場面が多くなった。同時にメモリへのインタフェースが単純化され(メモリにアクセスするタイミングが単純化され)、最適化できるようになった。

しかし、RISCにも欠点があった。単純な命令を組み合わせてプログラムを書くため、複雑な命令を持つCISCに比べて同じ処理を実現する場合に必要な命令数が増えた。加えて初期のRISCは命令語長が32ビット幅であり、プログラムサイズが大きくなり、コード密度が低くなると指摘された。当時、利点と欠点のどちらが性能にインパクトがあるかは議論の的となった。

RISC以前の設計思想編集

初期のプログラミング環境では、コンパイラは存在しなかった。プログラミングは機械語かアセンブリ言語で行われた。プログラミングをより簡単にするため、コンピュータの設計者はどんどん複雑な処理を行う命令を追加していった。それはつまり、現在ならば高度なプログラミング言語で関数(サブルーチン)レベルで実現されるべきものだった。当時の風潮としてコンパイラの設計よりもハードウェアの設計のほうが簡単であるという考えがあり、結果として複雑なことはハードウェアに担わせることとなった。

高度な命令の追加を必要とする別の要因としてメモリ空間に強い制約があったことが上げられる。メモリは非常に高価で、システムに用意できるメモリ空間が限られていたので、プログラム容量を縮小することが強く要請された。例えば、当時のシステムには数キロバイトしかメモリが搭載されていなかった。そのため、業界は高度で複雑な命令を必要としていたし、命令は可変長になっていて、ひとつの命令でいくつものことをこなし、また、ひとつの命令でデータの転送と演算を同時に行っていた。当時は命令デコードを単純化するよりも命令にいろいろな機能を組み込むことが優先された。

また、当時主流であった磁気コアメモリのアクセス速度は遅かった。そのため、情報の密度を高めアクセスする回数を減らすことで、アクセス速度の問題を軽減できる。

CPU内のレジスタ本数が少なかったのは以下のような理由からである。

  • レジスタの記憶セルは外部のメモリの記憶セルよりさらに高価だった。当時の集積回路のレベルでは、大きなレジスタセットはチップやボードのエリアの無駄遣いとしか思われなかった。
  • レジスタ数を増やすと、命令コード内でレジスタを指定するためのビットフィールドが増大し、結果として命令のサイズが大きくなって、貴重なメモリを浪費することになる。

以上のような理由から、CPU設計者は可能な限り一つの命令に多くの機能を詰め込んだ。これにより、例えば、ひとつの命令でメモリからふたつの数値をロードして加算し結果を直接メモリに格納する、ふたつの数値をロードして演算結果はレジスタに格納する、ひとつの数値をメモリからロードしてもうひとつはレジスタにあるものを使い演算結果をメモリに格納する、などの命令が実装されている。

当時の目標は実装されている全ての演算命令で全てのアドレッシングモードを使えるようにすることであった。これを直交性と称した。これはCPUを複雑にしたが、処理を個別に最適化することができるようになったとも言える。つまり、単純な命令のみを使えば高速に動作するようにである。この様な設計思想はRISCの概念が広まった後に、対比してCISCと呼ばれるようになった。

CISC的な設計の極致としてふたつの実例がある。ひとつは6502で、もうひとつはVAXである。25USドルの6502はひとつしかレジスタを持たないが、メモリインタフェースが最適化されているため、高速で動作できる(4MHzのザイログのZ80も同様)。VAXはミニコンピュータであり、ひとつのCPUにつき3個の筐体(ラック)を必要とする。特筆すべきはそのアドレッシングモードの豊富さで、全ての演算命令に全てのアドレッシングモードを組み合わせることができた。

CPUの性能向上のための他の方法編集

一方で、CPUの性能を向上する技術が導入されていった。

1980年代初頭、既存の設計技法は限界に来ていると考えられていた。将来の性能向上は半導体プロセスの進歩に依存するしかないが、それが限界に達するということはつまりチップ上の機能を削減するということである。チップの複雑性はそのままであるが、チップの面積を縮小することで動作周波数を上げることができる。通信リンクを組み込んだ並列コンピューティングの研究に少なからぬ投資が行われた。高速なチップを作る代わりにたくさんのチップを並べ、処理すべき問題を分割して各チップに割り当てるのである。

しかし、当初の恐れは杞憂であった。1980年代後半にはCPUの性能を向上させるいくつかの技術が導入された。ひとつは、1960年代よりメインフレーム用など高価なCISCのCPUで採用されていた技術であるが、命令の処理を複数のステップに分割する命令パイプラインや、その効果を高める分岐予測などである。これにより、複数の命令のそれぞれ別の処理ステージを同時に実行することで命令の並列実行を実現するのである。一般的なプロセッサは、命令を読み込み、デコード(解釈)し、必要ならばデータをメモリから取ってきて、実際の処理を実行し、結果を指定された場所に格納する。パイプラインという手法が生まれたのは、命令を読み込んだら、その命令の処理の完了を待たずに次の命令を読み込むことができるという洞察からであった。そうすると、後続の命令を読み込んでいる一方で先行の命令をデコードすることが可能となり、そして、次のサイクルでは実行、デコード、命令読み込みの三つとなり、実質的に複数の命令が並行して処理されていることになる。個々の命令を見ると、処理の完了までに数サイクルかかっていて決して高速ではない(レイテンシは短縮しない)が、次の命令との関係を見れば順次命令が実行され、1サイクル毎に命令の実行が終了していくことになる(スループットは高い)。これにより高速なシステムができ、プロセッサ内の資源が効率的に利用される。

もうひとつの解決法は処理ユニットをプロセッサ内に複数装備し、複数の演算を同時に行うスーパースケーラプロセッサの概念である。連続して読み込んだ複数の命令を、複数の処理ユニットに同時に投入して並列処理を行う。ただし、ある命令を実行するためには前の命令の実行結果を用いる(依存性がある)場合がしばしばあり、常にこの方法で性能を向上できるとは限らない。

パイプラインを導入したりスーパースケーラ化する手法は、単純なRISCアーキテクチャの設計に、調停機能や複数のデータパス、パイプラインレジスタを追加して性能を向上させようというものである。CISCでは複雑な命令を実装して、これにより一挙に複数の処理を行うことで性能を高めようとするのと対照的である。チップの面積は有限なので、性能向上のための仕組みを追加するためには何かを削らなくてはならないが、基本的なRISCアーキテクチャのCPUは非常に単純で面積が小さく、追加機能を実装する面積を確保するうえで非常に好都合だった。初期のRISCの性能は低かったが、これらの設計手法を取り入れることによって1980年代後半にはCISCを大きく引き離す性能を達成した。半導体プロセスの進歩によってこれらの手法をCISCに導入できるようになるには1990年代初頭のPentiumPentium Proまで待たねばならなかった[注 3]

RISCチップはそのコアを実現するのに必要なトランジスタ数が少なくて済むため、以下のような様々な機能や要求をチップに取り入れることができた。

  • レジスタセットの容量増加
  • 内部並列性を向上させるための調停機構
  • 巨大なキャッシュの追加
  • マイクロコントローラ向けのI/Oやタイマの追加
  • ベクタープロセッサ (SIMD命令) の追加
  • 何も付加しないで、低電力化や小型化を指向する

RISCデザインで一般的な特徴は以下の通りである。

  • 固定命令語長と統一されたビットフィールド設計
ビットフィードの構造を可能な限り統一し、オペコード・オペランドが常に同じビットに配置される様にして、命令デコードが高速に行える様にする
  • レジスタが基本的に全て同等で汎用である
コンパイラがレジスタに変数の割り当てを行うさいに制約がなく、コンパイラの実装が容易になる。ただし、整数用と浮動小数点数用レジスタは基本的に区別される
  • 単純なアドレッシングモード
オペランドとして指定したレジスタをポインタとしてメモリアクセスに使用したり、レジスタ値にオフセットを加えて実効アドレスを得るモードを持つ。それより複雑なアドレッシングは、演算命令を組み合わせて実効アドレスを算出した結果をレジスタに入れて使用する。
  • ハードウェアがサポートするデータ型が少ない
例えば、CISCには文字列やビットストリングを扱う命令を備えたり、多項式とか複素数を扱うものもあった。そのような命令はRISCには見受けられない。なお、最新のアーキテクチャではSIMD命令向けに、複数の値をパックしたデータ形式もサポートする。

RISCはハーバード・アーキテクチャを実現したものとも言われる。概念的に命令コードのフローとデータのフローが分離されているからである[注 4]。これによって、命令キャッシュとデータキャッシュへ同時にアクセスすることができ、性能向上に寄与する。

初期のRISCの設計には分岐遅延スロットの仕組みも備えられていた。これは分岐命令や条件分岐の直後の命令を指し、条件分岐で条件の成立の分岐するしないに関わらず、必ず実行される(逆に言えば分岐の効力が発揮されるのが遅れる)。これは、分岐命令の処理中もALUに仕事をさせて、分岐にかかるオーバーヘッドを隠蔽するための手法である。現在は、CPUの速度とメモリアクセスの差が広がり、またスーパースカラ構成をとる場合には遅延スロットに適切な個数が変わるなど、実装の影響を受けるために良くない仕組みと考えられていて、最近のRISCでは実装が避けられている。

初期のRISC編集

最初のRISCは開発時点ではRISCであるとは認識されていなかった。それは1964年Seymour CrayとJim Thorntonが設計したCDC 6600スーパーコンピュータである。ThortonとCrayは数値計算のためにわずか74種類の命令をもつCPUと周辺プロセッサ(OSの大部分はこちらで実行される)と呼ばれる12種の単純なコンピュータを設計した。CDC 6600にはたったふたつのアドレッシングモードしかなかった。CPUは演算用の11本のパイプラインとロード用の5本のパイプラインとストア用の2本のパイプラインを持つ。メモリは複数のバンクに分かれていて、ロード/ストアは並行して実行することが出来た。命令実行サイクルはメモリアクセスにかかる時間の10倍の速さであった。

もうひとつの初期のロード/ストアマシンとしては1968年に設計されたデータ・ゼネラルNova英語版がある。

最も一般に知られているRISCはDARPAVLSI計画の一環で行われた大学での研究である。VLSI計画は今日ではあまり知られていないが、チップの設計、製造、コンピュータグラフィックスなど様々な特筆すべき成果を生み出している。

カリフォルニア大学バークレー校のRISCプロジェクトはデイビッド・パターソンの指揮の下1980年に開始された。基本的な考え方はパイプラインと今日レジスタ・ウィンドウとして知られている大胆なレジスタの用法であった。同時期のCPUが内蔵するレジスタ本数は少数に限られていて、プログラムはその範囲でレジスタを使いまわした。レジスタ・ウィンドウを持つCPUでは、アーキテクチャ上128本のレジスタを持つが、プログラムからはある瞬間に、特定のレジスタ・ウィンドウに属する8本のレジスタのみが見える。CPUはプロシージャ(ルーチン、関数)ごとに別のウィンドウを割り当て、プロシージャごとに相互に異なる8本のレジスタを使用する。そのためプロシージャコールや復帰が極めて高速に実施される[注 5]

当時、パターソンらは、RISCはCPUを1チップに収めるための制約の下に単純なアーキテクチャを設計・実装したもので、性能が低下すると考えていた。レジスタ・ウィンドウは、その性能低下を補うために導入されたのである。1981年に発表された論文では、VAX11/780に対して実行サイクル数比で4倍との性能が示されたが、RISCの効果が正しく評価されず、レジスタ・ウィンドウによる効果だと説明されていた[2]

このRISCプロジェクトは1982年にRISC-Iを完成させた。同時期のCISCプロセッサが10万個のトランジスタからなっていたのに対して、わずか44,420個のトランジスタからなるRISC-Iは32種類の命令しか持たなかったが、極めて高性能だった。次いで1983年にRISC-Iの3倍の性能のRISC-IIが登場した。RISC-IIは40,760個のトランジスタからなり、39種類の命令を持っていた。

同じころ、ジョン・L・ヘネシー1981年スタンフォード大学MIPSプロジェクトを開始した。MIPSでは命令パイプラインを可能な限りフルに動作させることを目標としていた。命令パイプラインはすでに他でも使われていたが、いくつかの工夫によりMIPSのパイプラインは非常に高速に動作した。最も重要な点は全ての命令を1クロックサイクルで実行されるようにしたことである。これによりパイプラインは最大限に効果を発揮しプロセッサの高速化を実現した。但し、乗算や除算といった有用な命令は省略されていた。

チップ上にRISCのCPUを作るという最初の試みは、1975年にIBMが行ったもので、上述の大学の研究よりも早い。プロジェクトが開始された建物の番号をとってIBM 801と名づけられたプロセッサファミリはIBMのマシンに広く応用された。1981年に製造されたシングルチップのROMPResearch (Office Products Division) Mini Processorの略であり、名前が小型の市場を意識していることを示している。これを使って1986年IBM RT-PCをリリースしたが、性能的には問題があった。とはいうものの、801はいくつかのプロジェクトを生み出し、後にここからPOWERが生まれることになった。

初期のRISCは、単純で小型ながら高い性能を発揮する効果は知られていたものの研究室レベルで留まっていた。バークレーの成果はよく知られるようになったため、RISCという言葉が一般化することになった。多くのコンピュータ業界関係者は、実際の商用アプリケーションを高速に実行できなければ意味がないと批評し、それを使おうとしなかった。しかし1986年、各研究プロジェクトの成果が製品となっていった。実際、ほとんどのRISCプロセッサはRISC-IIの設計をコピーするところからはじまっている。

現在のRISC編集

2009年現在では、「RISC対CISC」という単純な優劣論争は、技術的にはもはや意味を持たない。x86などの代表的なCISCプロセッサは内部的にRISCのアーキテクチャを段階的に取り入れ、逆に代表的なRISCプロセッサは命令数の追加を続けているためである。

RISCの当初の設計思想は「少ない簡潔な命令数による、回路設計の単純化とパイプライン効果の最大化によって、性能向上と低コスト化、更には容易な動作周波数の向上を実現する」ものであった。しかし現在の主要なRISCプロセッサは、商用計算用の10進数演算や、暗号化仮想化アウト・オブ・オーダー実行などの複雑な命令を追加し続けている。この背景には、当初より幅広い用途や新しい機能が求められていること、性能を確保したまま多数の命令を実装できる半導体技術と回路設計技術の向上、単純な動作周波数の向上には消費電力や発熱などの副作用や限界があった。以降はマルチコア化へ性能向上の舵を切ることになる。このため現在では高性能なプロセッサの開発は、開発費用も製造費用(設備投資など)も膨大になり、大規模なチップメーカー以外はハイエンドのプロセッサの開発・製造が困難となっている。

とはいえ、命令数と回路規模以外は依然としてRISCの設計思想が強く残る。命令は32ビットチップこそ固定小数32ビット、浮動小数64ビット、SIMDが128ビットとなるが各ユニットで常に固定長、アドレッシングモードもレジスタ - レジスタとロード・ストアの二種しかないことに変わりなく、レジスタはIA-64は別として、x64と比較しても倍の32本以上を持つ。こうしたこともあって、プロセッサの分類として、x86やSystem zなどを「CISC」、MIPSPOWERSPARCなどを「RISC」と呼ぶ事は、なお一般的である。

市場別には、パーソナルコンピュータメインフレームでは、過去の命令セットとの上位互換性が重視され、CISCがほぼ独占している。UNIXサーバー市場では、ローエンドはCISC(主にx86)、ハイエンドはRISC(POWER、SPARCなど)が多数派である。携帯電話ゲーム機(ただし2013年にPlayStation 4Xbox Oneはx86になった)・ネットワーク機器など組み込み市場では、命令セットの上位互換性は重視されず、低消費電力かつ高性能なプロセッサが強く求められ、32ビット64ビットプロセッサではほぼRISCが独占している(ARM、MIPS、PowerPCSuperHなど)。

主なRISCプロセッサ編集

現行のプロセッサ編集

SPARCサン・マイクロシステムズ富士通
バークレーでの研究は直接製品化されることはなかったが、サン・マイクロシステムズはRISC-IIのデザインを使ってSPARCを開発した。また、Pyramid Technologyもミッドレンジのマルチプロセッサ機に使用した。他にも多くの企業がRISC-IIのデザインを利用した。これはサンの新たな機種で広く使われ、RISCの効果を世に知らしめた。これにより、サンは急速に成長し、ワークステーション市場をほぼ独占することになった。しかし1990年代後半にワークステーション市場はX86アーキテクチャのPCに敗れ去り消滅した。現在では同社および共同開発の富士通サーバ専用に少数が生産されている。
MIPS
ジョン・ヘネシーは一時期スタンフォード大学を離れてMIPSの商用化設計にとりかかるためミップス・コンピュータシステムズという企業を設立した。最初の製品は第二世代のMIPSチップR2000であった。MIPSのデザインはプレイステーションNINTENDO64などのゲーム機でも使われ、最も多く出荷され使われたRISCチップとなった。現在では組み込みシステム用のハイエンドのプロセッサとして有名である。
POWERPowerPCIBM
IBMはRT PCでの失敗を教訓として次期マシンRS/6000のベースとするためにPOWERアーキテクチャを設計した。POWERを小規模化したPowerPCでは、IBM固有の様々な命令が排除されてシングルチップ化された。PowerPCはデスクトップ向けでは1994年より2006年までMacintoshに使われた。PowerPCコアは、東芝などと共同開発のCellを含め、スーパーコンピュータから組み込みシステムまで幅広く展開し、据え置きのゲーム機にも多く使われている。
ARM (Acorn→ARM Ltd)
ARM1~3がAcornArchimedesなどに搭載された後に、アップルNewton向けプロセッサの共同開発を進めるためプロセッサ開発部門がARMとして独立。RISC-CPUの中でも特に低消費電力に注力した設計をもつ。組み込みシステム向けとして各社にライセンス展開し、携帯電話をはじめとした組み込み向け市場では圧倒的なシェアを誇る。サーバファームニンテンドーDSなどの携帯ゲーム機にも利用される。近年はAndroidなどのモバイルプラットフォームの成長に伴い、iPadなどのタブレットコンピュータにも多く採用されている。
SuperH日立製作所ルネサス エレクトロニクス
組み込みシステム向けで、SH-1~SH-5がある。コードサイズの効率化を狙って固定命令長を16ビットとした。このコンパクトな命令セットは他社の命令セットにも影響を与えた。セガのゲーム機にも使用された。
OpenRISCOpenCoresコミュニティ)
オープンソースハードウェア。ハードウェアのデザインはGNU LGPLで、モデルとファームウェアがGNU GPLでそれぞれ公開されている。
RISC-V (カリフォルニア大学バークレイ校)
オープンでフリーの命令セット。ハードウェアの実装は、企業、開発者によって行われている。
V850NEC→ルネサス エレクトロニクス)
M32R (三菱電機→ルネサス エレクトロニクス)
Atmel AVR
ESi-RISC

終息したプロセッサ編集

  • ROMP (IBM):世界初の商用RISCチップとしてRT-PCに搭載されたが普及せず、後のPOWERに引き継がれた。
  • i860/i960インテル
  • 88000モトローラ):ほとんど売れなかったため、モトローラはほどなくIBMのPowerPCの製造に参加した。
  • 29000 (AMD):1990年代初頭、ポピュラーなRISCプロセッサのひとつだった。PostScript プリンタのインタプリタ処理プロセッサとして広く使用された。
  • PA-RISC (HP):同社のワークステーションで使用された。Itaniumへの移行に伴い、PA-RISC搭載マシンの出荷は停止しているが、古いシステムでは2011年現在も利用されていることもある。
  • Alpha (DEC):64ビット構造を取るCPUで、ワークステーションや組み込み用途向け。RISC-CPUの中でも最速を誇ったが、同社がコンパックに買収された後、縮小。さらにコンパックはHPに買収された。開発チームは各社に散り、それぞれ別のRISC CPUに携わっている。2016年6月に世界最速と評価されたスーパーコンピュータ神威太湖之光に使用されている中国製CPUのベースとなっている。

RISCライクなプロセッサ編集

注釈編集

  1. ^ 例えば、カウンタレジスタをデクリメントし、減算結果が非ゼロであればジャンプし、ゼロであれば後続の命令を実行する、ループを構成するのに便利な命令や、文字列を転送するストリング命令など
  2. ^ データの退避や復帰、割り込み発生時のレジスタの退避、サブルーチンからリターンする際のアドレスの保存など。
  3. ^ ただしPentiumの実態は、複雑な命令(マイクロプログラム)をRISCで実装したものと言え、そういう意味ではCISCで実現したものではないと言える。
  4. ^ これは特別な同期命令を実行するまで、コードが存在する位置のメモリを書き換えても命令実行に影響しないということである。なぜならCPUは分離された命令キャッシュとデータキャッシュを持っているため
  5. ^ 通常のCPUでは、サブルーチンコール時にレジスタの内容をメモリのスタック領域に退避させ、復帰するときにメモリからレジスタに戻す

出典編集

  1. ^ a b ヘネシー&パターソン, p.478
  2. ^ 五島正裕「20世紀の名著名論」『情報処理』46巻3号、317頁、情報処理学会、2005年3月。 これは原論文(下記)の評論である。
    David A. Patterson and Carlo H.Sequin, “RISC I:A Reduced Instruction Set VLSI Computer” Proc. Int`l Symp. On Computer Architecture, 1981, pp. 443-457.

参考文献編集

  • ジョン・L・ヘネシー『コンピュータアーキテクチャ 定量的アプローチ 第四版』中条拓伯, 天野英晴, 吉瀬謙二, 佐藤寿倫訳、翔泳社、2009年、初版。ISBN 978-4-7981-1440-8

関連項目編集

外部リンク編集