出典(authority):フリー百科事典『ウィキペディア(Wikipedia)』「2013/06/21 16:42:20」(JST)
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。 出典を追加して記事の信頼性向上にご協力ください。(2011年12月) |
RISC(りすく、英: Reduced Instruction Set Computer)は、コンピュータの命令セットアーキテクチャ(ISA)の設計手法の一つで、命令の種類を減らし、回路を単純化して演算速度の向上を図るものである。なお、RISCが提唱されたときに、従来の設計手法に基づくアーキテクチャは対義語としてCISCと呼ばれる様になった。
RISCを採用したプロセッサ(CPU)をRISCプロセッサと呼ぶ。RISCプロセッサの例として、MIPS、POWER、SPARCなどが知られる。
目次
|
RISCのアーキテクチャの着想は、従来のプロセッサに備わっていた様々な命令の大部分が、実際のプログラムを書く際にはほとんど使われていないことが見出されたことにある。CISCアーキテクチャでは、複数の処理を一挙にこなす複雑な命令をもち、また、個々の演算命令につき、任意のアドレッシングモードを組み合わせることが可能(直交性がある)で、総数として(演算命令の種類×アドレッシングモード)個の命令が存在する。だが実際に作成されたプログラムを解析すると、使用される命令はそのうちのごくわずかなものに限られることが判った。それに基づいて命令セットを簡潔にし、回路を単純にすることで、クロックサイクルを短縮して全体としての高速化を図るアーキテクチャである。
RISCアーキテクチャの特徴としては
などが挙げられるが、例外も多い。
CISCではハードウエアでサポートされているスタック操作命令がRISCにはなく、スタック操作[注 1]などの処理は単純な命令を組み合わせてソフトウエアで明示的に実現することになる。命令の組み合わせによって発生するパイプラインハザードはコンパイラでコード生成時に検出し、命令の順序を最適化することで回避する。排他制御などで不可欠なアトミック命令は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ビット幅であり、プログラム容量が大きくなり、コード密度が低くなると指摘された。当時、利点と欠点のどちらが性能にインパクトがあるかは議論の的となった。
初期のプログラミング環境では、コンパイラは存在しなかった。プログラミングは機械語かアセンブリ言語で行われた。プログラミングをより簡単にするため、コンピュータの設計者はどんどん複雑な処理を行う命令を追加していった。それはつまり、現在ならば高度なプログラミング言語で関数(サブルーチン)レベルで実現されるべきものだった。当時の風潮としてコンパイラの設計よりもハードウェアの設計のほうが簡単であるという考えがあり、結果として複雑なことはハードウェアに担わせることとなった。
高度な命令の追加を必要とする別の要因としてメモリ空間に強い制約があったことが上げられる。メモリは非常に高価で、システムに用意できるメモリ空間が限られていたので、プログラム容量を縮小することが強く要請された。例えば、当時のシステムには数キロバイトしかメモリが搭載されていなかった。そのため、業界は高度で複雑な命令を必要としていたし、命令は可変長になっていて、ひとつの命令でいくつものことをこなし、また、ひとつの命令でデータの転送と演算を同時に行っていた。当時は命令デコードを単純化するよりも命令にいろいろな機能を組み込むことが優先された。
また、当時主流であった磁気コアメモリのアクセス速度は遅かった。そのため、情報の密度を高めアクセスする回数を減らすことで、アクセス速度の問題を軽減できる。
CPU内のレジスタ本数が少なかったのは以下のような理由からである。
以上のような理由から、CPU設計者は可能な限り一つの命令に多くの機能を詰め込んだ。これにより、例えば、ひとつの命令でメモリからふたつの数値をロードして加算し結果を直接メモリに格納する、ふたつの数値をロードして演算結果はレジスタに格納する、ひとつの数値をメモリからロードしてもうひとつはレジスタにあるものを使い演算結果をメモリに格納する、などの命令が実装されている。
当時の目標は実装されている全ての演算命令で全てのアドレッシングモードを使えるようにすることであった。これを直交性と称した。これはCPUを複雑にしたが、処理を個別に最適化することができるようになったとも言える。つまり、単純な命令のみを使えば高速に動作するようにである。この様な設計思想はRISCの概念が広まった後に、対比してCISCと呼ばれるようになった。
CISC的な設計の極致としてふたつの実例がある。ひとつは6502で、もうひとつはVAXである。25USドルの6502はひとつしかレジスタを持たないが、メモリインタフェースが最適化されているため、高速で動作できる(4MHzのザイログのZ80も同様)。VAXはミニコンピュータであり、ひとつのCPUにつき3個の筐体(ラック)を必要とする。特筆すべきはそのアドレッシングモードの豊富さで、全ての演算命令で全てのアドレッシングモードを組み合わせることができた。
一方で、CPUの性能を向上する技術が導入されていった。
1980年代初頭、既存の設計技法は限界に来ていると考えられていた。将来の性能向上は半導体プロセスの進歩に依存するしかないが、それが限界に達するということはつまりチップ上の機能を削減するということである。チップの複雑性はそのままであるが、チップの面積を縮小することで動作周波数を上げることができる。通信リンクを組み込んだ並列コンピューティングの研究に少なからぬ投資が行われた。高速なチップを作る代わりにたくさんのチップを並べ、処理すべき問題を分割して各チップに割り当てるのである。
しかし、当初の恐れは杞憂であった。1980年代後半にはCPUの性能を向上させるいくつかの技術が導入された。ひとつは、1960年代よりメインフレーム用など高価なCISCのCPUで採用されていた技術であるが、命令の処理を複数のステップに分割する命令パイプラインや、その効果を高める分岐予測などである。これにより、複数の命令のそれぞれ別の処理ステージを同時に実行することで命令の並列実行を実現するのである。一般的なプロセッサは、命令を読み込み、デコード(解釈)し、必要ならばデータをメモリから取ってきて、実際の処理を実行し、結果を指定された場所に格納する。パイプラインという手法が生まれたのは、命令を読み込んだら、その命令の処理の完了を待たずに次の命令を読み込むことができるという洞察からであった。そうすると、後続の命令を読み込んでいる一方で先行の命令をデコードすることが可能となり、そして、次のサイクルでは実行、デコード、命令読み込みの三つとなり、実質的に複数の命令が並行して処理されていることになる。個々の命令を見ると、処理の完了までに数サイクルかかっていて決して高速ではない(レイテンシは短縮しない)が、次の命令との関係を見れば順次命令が実行され、1サイクル毎に命令の実行が終了していくことになる(スループットは高い)。これにより高速なシステムができ、プロセッサ内の資源が効率的に利用される。
もうひとつの解決法は処理ユニットをプロセッサ内に複数装備し、複数の演算を同時に行うスーパースケーラプロセッサの概念である。連続して読み込んだ複数の命令を、複数の処理ユニットに同時に投入して並列処理を行う。ただし、ある命令を実行するためには前の命令の実行結果を用いる(依存性がある)場合がしばしばあり、常にこの方法で性能を向上できるとは限らない。
パイプラインを導入したりスーパースケーラ化する手法は、単純なRISCアーキテクチャの設計に、調停機能や複数のデータパス、パイプラインレジスタを追加して性能を向上させようというものである。CISCでは複雑な命令を実装して、これにより一挙に複数の処理を行うことで性能を高めようとするのと対照的である。チップの面積は有限なので、性能向上のための仕組みを追加するためには何かを削らなくてはならないが、基本的なRISCアーキテクチャのCPUは非常に単純で面積が小さく、追加機能を実装する面積を確保するうえで非常に好都合だった。初期のRISCの性能は低かったが、これらの設計手法を取り入れることによって1980年代後半にはCISCを大きく引き離す性能を達成した。半導体プロセスの進歩によってこれらの手法をCISCに導入できるようになるには1990年代初頭のPentium、Pentium Proまで待たねばならなかった。
RISCチップはそのコアを実現するのに必要なトランジスタ数が少なくて済むため、以下のような様々な機能や要求をチップに取り入れることができた。
RISCデザインで一般的な特徴は以下の通りである。
RISCはハーバード・アーキテクチャを実現したものとも言われる。概念的に命令コードのフローとデータのフローが分離されているからである[注 2]。これによって、命令キャッシュとデータキャッシュへ同時にアクセスすることができ、性能向上に寄与する。
初期のRISCの設計には分岐遅延スロットの仕組みも備えられていた。これは分岐命令や条件分岐の直後の命令を指し、条件分岐で条件の成立の分岐するしないに関わらず、必ず実行される(逆に言えば分岐の効力が発揮されるのが遅れる)。これは、分岐命令の処理中もALUに仕事をさせて、分岐にかかるオーバーヘッドを隠蔽するための手法である。現在は、CPUの速度とメモリアクセスの差が広がり、またスーパースカラ構成をとる場合には遅延スロットに適切な個数が変わるなど、実装の影響を受けるために良くない仕組みと考えられていて、最近の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はDARPAのVLSI計画の一環で行われた大学での研究である。VLSI計画は今日ではあまり知られていないが、チップの設計、製造、コンピュータグラフィックスなど様々な特筆すべき成果を生み出している。
カリフォルニア大学バークレー校のRISCプロジェクトはデイビッド・パターソンの指揮の下1980年に開始された。基本的な考え方はパイプラインと今日レジスタ・ウィンドウとして知られている大胆なレジスタの用法であった。同時期のCPUが内蔵するレジスタ本数は少数に限られていて、プログラムはその範囲でレジスタを使いまわした。レジスタ・ウィンドウを持つCPUでは、アーキテクチャ上128本のレジスタを持つが、プログラムからはある瞬間に、特定のレジスタ・ウィンドウに属する8本のレジスタのみが見える。CPUはプロシージャ(ルーチン、関数)ごとに別のウィンドウを割り当て、プロシージャごとに相互に異なる8本のレジスタを使用する。そのためプロシージャコールや復帰が極めて高速に実施される[注 3]。
当時、パターソンらは、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年に製造されたシングルチップのROMPはResearch (Office Products Division) Mini Processorの略であり、名前が小型の市場を意識していることを示している。これを使って1986年にIBM RT-PCをリリースしたが、性能的には問題があった。とはいうものの、801はいくつかのプロジェクトを生み出し、後にここからPOWERが生まれることになった。
初期のRISCは、単純で小型ながら高い性能を発揮する効果は知られていたものの研究室レベルで留まっていた。バークレーの成果はよく知られるようになったため、RISCという言葉が一般化することになった。多くのコンピュータ業界関係者は、実際の商用アプリケーションを高速に実行できなければ意味がないと批評し、それを使おうとしなかった。しかし1986年、各研究プロジェクトの成果が製品となっていった。実際、ほとんどのRISCプロセッサはRISC-IIの設計をコピーするところからはじまっている。
2009年現在では、「RISC対CISC」という単純な優劣論争は、技術的にはもはや意味を持たない。x86などの代表的なCISCプロセッサは内部的にRISCのアーキテクチャを段階的に取り入れ、逆に代表的なRISCプロセッサは命令数の追加を続けているためである。
RISCの当初の設計思想は「少ない簡潔な命令数による、回路設計の単純化とパイプライン効果の最大化によって、性能向上と低コスト化、更には容易なクロックアップを実現する」ものであった。しかし現在の主要なRISCプロセッサは、商用計算用の10進数演算や、暗号化、仮想化などの命令を追加し続けている。この背景には、当初より幅広い用途や新しい機能が求められていること、性能を確保したまま多数の命令を実装できる半導体技術と回路設計技術の向上、単純なクロックアップには消費電力や発熱などの副作用や限界もあり、マルチコア化へ性能向上の舵を切ることになる。ただし歴史的なプロセッサの分類として、x86やSystem zなどを「CISC」、MIPS・POWER・SPARCなどを「RISC」と呼ぶ事は、2009年現在でも一般的である。
このため現在では高性能なプロセッサの開発は、開発費用も製造費用(設備投資など)も膨大になり、大規模なチップメーカー以外はハイエンドのプロセッサの開発・製造が困難となっている。
市場別には、パーソナルコンピュータとメインフレームでは、過去の命令セットとの上位互換性が重視され、CISCがほぼ独占している。UNIXサーバー市場では、ローエンドはCISC(主にx86)、ハイエンドはRISC(POWER、SPARCなど)が多数派である。携帯電話・ゲーム機・ネットワーク機器など組み込み市場では、命令セットの上位互換性は重視されず、低消費電力かつ高性能なプロセッサが強く求められ、32ビット・64ビットプロセッサではほぼRISCが独占している(ARM、MIPS、PowerPC、SuperHなど)。
[ヘルプ] |
|
この項目は、コンピュータに関連した書きかけの項目です。この記事を加筆・訂正などしてくださる協力者を求めています(PJ:コンピュータ/P:コンピュータ)。 |
Reduced instruction set computing, or RISC /ˈrɪsk/, is a CPU design strategy based on the insight that simplified (as opposed to complex) instructions can provide higher performance if this simplicity enables much faster execution of each instruction. A computer based on this strategy is a reduced instruction set computer, also called RISC. The opposing architecture is known as complex instruction set computing, i.e. CISC.
Various suggestions have been made regarding a precise definition of RISC, but the general concept is that of a system that uses a small, highly-optimized set of instructions, rather than a more specialized set of instructions often found in other types of architectures. Another common trait is that RISC systems use the load/store architecture,[1] where memory is normally accessed only through specific instructions, rather than accessed as part of other instructions like add
.
Although a number of systems from the 1960s and 70s have been identified as being forerunners of RISC, the modern version of the design dates to the 1980s. In particular, two projects at Stanford University and University of California, Berkeley are most associated with the popularization of the concept. Stanford's design would go on to be commercialized as the successful MIPS architecture, while Berkeley's RISC gave its name to the entire concept, commercialized as the SPARC. Another success from this era were IBM's efforts that eventually lead to the Power Architecture. As these projects matured, a wide variety of similar designs flourished in the late 1980s and especially the early 1990s, representing a major force in the Unix workstation market as well as embedded processors in laser printers, routers and similar products.
Well-known RISC families include DEC Alpha, AMD 29k, ARC, ARM, Atmel AVR, Blackfin, Intel i860 and i960, MIPS, Motorola 88000, PA-RISC, Power (including PowerPC), SuperH, and SPARC. In the 21st century, the use of ARM architecture processors in smart phones and tablet computers such as the iPad and Android tablets provided a wide user base for RISC-based systems. RISC processors are also used in supercomputers such as the K computer, the fastest on the TOP500 list in 2011, and the second at the 2012 list.[2][3]
Contents
|
A number of systems, going back to the 1970s (and even 1960s) have been credited as the first RISC architecture, partly based on their use of load/store approach.[4] The term RISC was coined by David Patterson of the Berkeley RISC project, although somewhat similar concepts had appeared before.[5]
The CDC 6600 designed by Seymour Cray in 1964 used a load/store architecture with only two addressing modes (register+register, and register+immediate constant) and 74 opcodes, with the basic clock cycle/instruction issue rate being 10 times faster than the memory access time.[6] Partly due to the optimized load/store architecture of the CDC 6600 Jack Dongarra states that it can be considered as a forerunner of modern RISC systems, although a number of other technical barriers needed to be overcome for the development of a modern RISC system.[7]
Michael J. Flynn views the first RISC system as the IBM 801 design which began in 1975 by John Cocke, and completed in 1980.[1] The 801 was eventually produced in a single-chip form as the ROMP in 1981, which stood for 'Research OPD [Office Products Division] Micro Processor'.[8] As the name implies, this CPU was designed for "mini" tasks, and was also used in the IBM RT-PC in 1986, which turned out to be a commercial failure.[9] But the 801 inspired several research projects, including new ones at IBM that would eventually lead to the IBM POWER instruction set architecture.[10][11]
The most public RISC designs, however, were the results of university research programs run with funding from the DARPA VLSI Program. The VLSI Program, practically unknown today, led to a huge number of advances in chip design, fabrication, and even computer graphics. The Berkeley RISC project started in 1980 under the direction of David Patterson and Carlo H. Sequin.[5] [12][13]
Berkeley RISC was based on gaining performance through the use of pipelining and an aggressive use of a technique known as register windowing.[12][13] In a traditional CPU, one has a small number of registers, and a program can use any register at any time. In a CPU with register windows, there are a huge number of registers, e.g. 128, but programs can only use a small number of them, e.g. eight, at any one time. A program that limits itself to eight registers per procedure can make very fast procedure calls: The call simply moves the window "down" by eight, to the set of eight registers used by that procedure, and the return moves the window back.[14] The Berkeley RISC project delivered the RISC-I processor in 1982. Consisting of only 44,420 transistors (compared with averages of about 100,000 in newer CISC designs of the era) RISC-I had only 32 instructions, and yet completely outperformed any other single-chip design. They followed this up with the 40,760 transistor, 39 instruction RISC-II in 1983, which ran over three times as fast as RISC-I.[13]
The MIPS architecture grew out of a graduate course by John L. Hennessy at Stanford University in 1981, resulted in a functioning system in 1983, and could run simple programs by 1984.[15] The MIPS approach emphasized an aggressive clock cycle and the use of the pipeline, making sure it could be run as "full" as possible.[15] The MIPS system was followed by the MIPS-X and in 1984 Hennessy and his colleagues formed MIPS Computer Systems.[15][16] The commercial venture resulted in the R2000 microprocessor in 1985, and was followed by the R3000 in 1988.[16]
In the early 1980s, significant uncertainties surrounded the RISC concept, and it was uncertain if it could have a commercial future, but by the mid-1980s the concepts had matured enough to be seen as commercially viable.[9][15] In 1986 Hewlett Packard started using an early implementation of their PA-RISC in some of their computers.[9] In the meantime, the Berkeley RISC effort had become so well known that it eventually became the name for the entire concept and in 1987 Sun Microsystems began shipping systems with the SPARC processor, directly based on the Berkeley RISC-II system.[9][17]
The US government Committee on Innovations in Computing and Communications credits the acceptance of the viability of the RISC concept to the success of the SPARC system.[9] The success of SPARC renewed interest within IBM, which released new RISC systems by 1990 and by 1995 RISC processors were the foundation of a $15 billion server industry.[9]
As of 2011 a new research ISA, RISC-V, has been under development at University of California, Berkeley, emphasizing features such as manycore, heterogeneous multiprocessing, virtualizability, and dense instruction encoding.[18]
This section needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed. (March 2012) |
A common misunderstanding of the phrase "reduced instruction set computer" is the mistaken idea that instructions are simply eliminated, resulting in a smaller set of instructions. In fact, over the years, RISC instruction sets have grown in size, and today many of them have a larger set of instructions than many CISC CPUs.[19][20] Some RISC processors such as the PowerPC have instruction sets as large as, say, the CISC IBM System/370; and conversely, the DEC PDP-8—clearly a CISC CPU because many of its instructions involve multiple memory accesses—has only 8 basic instructions, plus a few extended instructions.
The term "reduced" in that phrase was intended to describe the fact that the amount of work any single instruction accomplishes is reduced—at most a single data memory cycle—compared to the "complex instructions" of CISC CPUs that may require dozens of data memory cycles in order to execute a single instruction.[21] In particular, RISC processors typically have separate instructions for I/O and data processing.[citation needed]
For any given level of general performance, a RISC chip will typically have far fewer transistors dedicated to the core logic which originally allowed designers to increase the size of the register set and increase internal parallelism.
Other features that are typically found in RISC architectures are:
Exceptions abound, of course, within both CISC and RISC.
RISC designs are also more likely to feature a Harvard memory model, where the instruction stream and the data stream are conceptually separated; this means that modifying the memory where code is held might not have any effect on the instructions executed by the processor (because the CPU has a separate instruction and data cache), at least until a special synchronization instruction is issued. On the upside, this allows both caches to be accessed simultaneously, which can often improve performance.
Many early RISC designs also shared the characteristic of having a branch delay slot. A branch delay slot is an instruction space immediately following a jump or branch. The instruction in this space is executed, whether or not the branch is taken (in other words the effect of the branch is delayed). This instruction keeps the ALU of the CPU busy for the extra time normally needed to perform a branch. Nowadays the branch delay slot is considered an unfortunate side effect of a particular strategy for implementing some RISC designs, and modern RISC designs generally do away with it (such as PowerPC and more recent versions of SPARC and MIPS).[citation needed]
Some aspects attributed to the first RISC-labeled designs around 1975 include the observations that the memory-restricted compilers of the time were often unable to take advantage of features intended to facilitate manual assembly coding, and that complex addressing modes take many cycles to perform due to the required additional memory accesses. It was argued that such functions would be better performed by sequences of simpler instructions if this could yield implementations small enough to leave room for many registers, reducing the number of slow memory accesses. In these simple designs, most instructions are of uniform length and similar structure, arithmetic operations are restricted to CPU registers and only separate load and store instructions access memory. These properties enable a better balancing of pipeline stages than before, making RISC pipelines significantly more efficient and allowing higher clock frequencies.
In the early days of the computer industry, programming was done in assembly language or machine code, which encouraged powerful and easy-to-use instructions. CPU designers therefore tried to make instructions that would do as much work as feasible. With the advent of higher level languages, computer architects also started to create dedicated instructions to directly implement certain central mechanisms of such languages. Another general goal was to provide every possible addressing mode for every instruction, known as orthogonality, to ease compiler implementation. Arithmetic operations could therefore often have results as well as operands directly in memory (in addition to register or immediate).
The attitude at the time was that hardware design was more mature than compiler design so this was in itself also a reason to implement parts of the functionality in hardware or microcode rather than in a memory constrained compiler (or its generated code) alone. After the advent of RISC, this philosophy became retroactively known as complex instruction set computing, or CISC.
CPUs also had relatively few registers, for several reasons:
An important force encouraging complexity was very limited main memories (on the order of kilobytes). It was therefore advantageous for the density of information held in computer programs to be high, leading to features such as highly encoded, variable length instructions, doing data loading as well as calculation (as mentioned above). These issues were of higher priority than the ease of decoding such instructions.
An equally important reason was that main memories were quite slow (a common type was ferrite core memory); by using dense information packing, one could reduce the frequency with which the CPU had to access this slow resource. Modern computers face similar limiting factors: main memories are slow compared to the CPU and the fast cache memories employed to overcome this are limited in size. This may partly explain why highly encoded instruction sets have proven to be as useful as RISC designs in modern computers.
RISC was developed as an alternative to what is now known as CISC. Over the years, other strategies have been implemented as alternatives to RISC and CISC. Some examples are VLIW, MISC, OISC, massive parallel processing, systolic array, reconfigurable computing, and dataflow architecture.
In the mid-1970s, researchers (particularly John Cocke) at IBM (and similar projects elsewhere) demonstrated that the majority of combinations of these orthogonal addressing modes and instructions were not used by most programs generated by compilers available at the time. It proved difficult in many cases to write a compiler with more than limited ability to take advantage of the features provided by conventional CPUs.
It was also discovered that, on microcoded implementations of certain architectures, complex operations tended to be slower than a sequence of simpler operations doing the same thing. This was in part an effect of the fact that many designs were rushed, with little time to optimize or tune every instruction, but only those used most often. One infamous example was the VAX's INDEX
instruction.[12]
As mentioned elsewhere, core memory had long since been slower than many CPU designs. The advent of semiconductor memory reduced this difference, but it was still apparent that more registers (and later caches) would allow higher CPU operating frequencies. Additional registers would require sizeable chip or board areas which, at the time (1975), could be made available if the complexity of the CPU logic was reduced.
Yet another impetus of both RISC and other designs came from practical measurements on real-world programs. Andrew Tanenbaum summed up many of these, demonstrating that processors often had oversized immediates. For instance, he showed that 98% of all the constants in a program would fit in 13 bits, yet many CPU designs dedicated 16 or 32 bits to store them. This suggests that, to reduce the number of memory accesses, a fixed length machine could store constants in unused bits of the instruction word itself, so that they would be immediately ready when the CPU needs them (much like immediate addressing in a conventional design). This required small opcodes in order to leave room for a reasonably sized constant in a 32-bit instruction word.
Since many real-world programs spend most of their time executing simple operations, some researchers decided to focus on making those operations as fast as possible. The clock rate of a CPU is limited by the time it takes to execute the slowest sub-operation of any instruction; decreasing that cycle-time often accelerates the execution of other instructions.[22] The focus on "reduced instructions" led to the resulting machine being called a "reduced instruction set computer" (RISC). The goal was to make instructions so simple that they could easily be pipelined, in order to achieve a single clock throughput at high frequencies.
Later, it was noted that one of the most significant characteristics of RISC processors was that external memory was only accessible by a load or store instruction. All other instructions were limited to internal registers. This simplified many aspects of processor design: allowing instructions to be fixed-length, simplifying pipelines, and isolating the logic for dealing with the delay in completing a memory access (cache miss, etc.) to only two instructions. This led to RISC designs being referred to as load/store architectures.[23]
One more issue is that some complex instructions are difficult to restart, e.g. following a page fault. In some cases, restarting from the beginning will work (although wasteful), but in many cases this would give incorrect results. Therefore the machine needs to have some hidden state to remember which parts went through and what remains to be done. With a load/store machine, the program counter is sufficient to describe the state of the machine.
This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed. (March 2012) |
Some CPUs have been specifically designed to have a very small set of instructions – but these designs are very different from classic RISC designs, so they have been given other names such as minimal instruction set computer (MISC), or transport triggered architecture (TTA), etc.
Despite many successes, RISC has made few inroads into the desktop PC and commodity server markets, where Intel's x86 platform remains the dominant processor architecture. There are three main reasons for this:
While early RISC designs differed significantly from contemporary CISC designs, by 2000 the highest performing CPUs in the RISC line were almost indistinguishable from the highest performing CPUs in the CISC line.[24][25][26]
A number of vendors, including Qualcomm, are attempting to enter the PC market with ARM-based devices dubbed smartbooks, riding on the netbook trend and rising acceptance of GNU/Linux distributions, a number of which already have ARM builds.[27] Other companies are choosing to use Windows CE.[citation needed]
RISC architectures are now used across a wide range of platforms, from cellular telephones and tablet computers to some of the world's fastest supercomputers such as the K computer, the fastest on the TOP500 list in 2011.[2][3]
By the beginning of the 21st century, the majority of low end and mobile systems relied on RISC architectures.[28] Examples include:
Computer science portal |
This article includes a list of references, but its sources remain unclear because it has insufficient inline citations. Please help to improve this article by introducing more precise citations. (May 2010) |
|
|
全文を閲覧するには購読必要です。 To read the full text you will need to subscribe.
リンク元 | 「RNA誘導サイレンシング複合体」 |
関連記事 | 「RI」 |
-RISC
.