See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
RISC - Wikipedia

RISC

出典: フリー百科事典『ウィキペディア(Wikipedia)』

RISC(リスク)とは、Reduced Instruction Set Computer(縮小命令セットコンピュータ)の略で、マイクロプロセッサアーキテクチャすなわち設計手法の一つである。制御命令の数を減らし、加減算などの単純な処理の組み合わせによって回路を単純化し演算速度の向上を図ろうとする手法である。

このアーキテクチャの着想は、CPUに備わっていた様々な制御命令の大部分が、実際にはプログラムを書く際に無視されて使われていないことが発見されたことであった。CISCアーキテクチャでは(命令の種類 × アドレッシングモードの種類)個の命令が存在するが、実際に使用される命令はそのうち限られたごくわずかな命令であることが判り、それに基づいて命令セットを簡単な命令に絞って実装化することで全体としての高速化を図るアーキテクチャである。

目次

[編集] 特徴

特徴としては

  • 固定命令語長(命令の先読みをしてパイプラインの効率を上げるため)
  • 全ての演算は1クロックで実行する。(パイプラインをウエイトさせない)
  • 演算はレジスタ‐レジスタ間演算のみ。(回路の単純化とメモリの遅さの影響を避けるため)
  • ワイヤードロジックで構成する(高クロックを可能にする)
  • レジスタが極端に多い。(メモリの遅さの影響を避けるため)
  • 遅延実行(パイプラインハザードを避けるため)

があったが、例外も多い。

CISCではハードウエアでサポートされているスタックがRISCにはなく、スタック操作(データのPUSH、POP、割り込み発生時のレジスタの退避、サブルーチンへジャンプした時の帰りアドレスの保存、復帰)などの処理は単純な命令を組み合わせてソフトウエアで実現することになる。命令の組み合わせによって発生するパイプラインハザードはコンパイラで回避する。排他制御など、複数の演算を行うが単純な命令に分解すると意味が無くなる命令はRISCでもサポートされる。

命令語長を固定長にすることでパイプライン処理の際に高速化が期待できるが、プログラムをコンパイルする際に最適化を行う必要があり、コンパイラは複雑になりがちである。

[編集] 歴史

[編集] RISC設計思想

1970年代後半、IBMなどで、実際に使用されているプログラムの解析から、いわゆる直交性のあるアドレッシングモードの大部分は実際のプログラムでは使われていないことが判明した。これは、アセンブリ言語を直接使ってプログラムを書くよりもコンパイラを使うことが多くなったことの副産物である。CISCの命令セットは、高級言語のコンパイラが作りやすいように、高級言語の命令を機械語のレベルでそのまま実装できる複雑なものとして発展したが、当時のコンパイラはCISCのCPUが持つ利点をあまり生かせていなかった。というのもコンパイラの開発は非常に高度で困難を伴うことだったからである。市場にはそれでもコンパイラが浸透していき、直交性の利点は薄められていった。

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

そのころ、CPUはメモリよりも速度向上が著しくなってきていた。1970年後半でさえ、その速度向上の傾向が今後10年にわたって拡大し続けていくことが明らかだった。すなわち、10年の間にCPUの速度はメモリの10倍、100倍となってゆくのである。こうしてより高速化していくCPUの演算速度が効果を発揮するには、レジスタ(後にはキャッシュ)を増やさなければならいことは明らかだった。レジスタやキャッシュメモリのために、チップやボード内の領域を空ける必要がある。CPUの複雑性を低減した結果、空いた領域をそのために使うことができた。

さらに別のRISCデザインは実際に使われているプログラムの性能計測からも浮上してきた。アンドリュー・タンネンバウムは様々なプログラムを集めて計測結果をまとめ、多くのプロセッサは機能を詰め込みすぎであることを立証した。例えば、彼はプログラム内の定数値のうち98%が13ビットに収まることを示した。しかし、ほとんどのCPUは定数値を格納するエリアのサイズとして8ビットの倍数にあたるサイズを用意していた。つまり、典型的には8ビット、16ビット、32ビットである。これが意味するのは、定数を命令の中の使われていないビット列に格納することによってメモリアクセスを減らすことができるということである。数値をメモリやレジスタから取ってくるのではなく、CPUが必要な数値がすでにそこにあることで速度を向上させることができる。しかし、これを実現するためには命令本体を小さくする必要がある。そうでないと命令の中にそれなりのサイズの数値を埋め込むことができないからである。

これがアドレッシングモードの削減と命令の削減であり、縮小命令セット (Reduced Instruction Set)という用語が生まれた。RISCデザインのプロセッサは巨大な命令セットを持つこともあるので、これは正確な用語ではない。本当の違いは、全ての演算をレジスタ間で行い、メモリへの読み書きもレジスタとメモリの間でのみ行う点である。このためRISCはload-storeとも呼ばれる。後に従来の設計手法はComplex Instruction Set Computer(CISC)として知られるようになった。ただし、これはあくまでもRISCと対比させて使う用語である。

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

しかし、RISCにも欠点があった。単純な命令でプログラムを書くため、同じタスクを実現する場合でも命令数が増え、結果としてプログラムが大きくなる。当時、利点と欠点のどちらが性能にインパクトがあるかは議論の的となった。

[編集] RISC以前の設計思想

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

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

メモリは小さいだけでなく、磁気コアメモリが主流だったため、遅かった。そのため、情報の密度を高める必要があった。情報の密度が高ければ、この遅いメモリにアクセスする回数を減らすことができる。

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

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

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

当時の目標は考えられる全てのアドレッシングモードを全ての命令で使えるようにすることであった。これを直交性と称した。これはCPUを複雑にしたが、処理を個別に最適化することができるようになったとも言える。つまり、単純な命令のみを使えば高速に動作するようにである。

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

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

一方で、CPUの性能を劇的に向上するアイデアが開発に移されようとしていた。

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

ひとつのアイデアは命令の処理を複数のステップに分割して命令パイプラインをCPUに導入することであった。これにより、いくつかの命令についてそれぞれ別の処理ステージを実行することで命令の並列実行を実現するのである。一般的なプロセッサは、命令を読み込み、デコード(解釈)し、必要ならばデータをメモリから取ってきて、実際の処理を実行し、結果を指定された場所に格納する。パイプラインという手法が生まれたのは、命令を読み込んだら、その後の処理の完了を待たずに次の命令を読み込むことができるという洞察からであった。そうすると、実質的にふたつの命令が並行して処理されていることになる(一方は読み込んでいるところで、もう一方はデコード中)。そして、次のサイクルがくれば三つである。個々の命令を見ると、処理の完了までに数サイクルかかっていて決して高速ではないが、次の命令との関係を見れば次々と命令が完了していることになる。これにより高速なシステムができ、プロセッサ内の資源が効率的に利用される。

もうひとつの解決法は処理ユニットをプロセッサ内に複数装備して、並行して動作させるというものである。ふたつの数値を加算するというひとつの命令を実行する代わりに、スーパースケーラプロセッサはパイプラン上の次の命令を別の処理ユニットで実行させようと試みる。これは簡単なことではない。多くの命令は他の命令の実行結果に依存しているからである。

これらの手法はCPUの基本的なレイアウトを複雑化して性能を向上させようというものである。この点が命令を複雑化させようとしたCISCの手法と対照的である。チップの面積は有限なので、これらの機能を入れようとすると何かを削らなくてはならない。RISCはこれらの手法を実現するに当たっておあつらえ向きだった。RISCのCPUの回路はCISCに比べて非常に単純だったからである。初期のRISCの性能は低かったが、これらの新しい設計手法を取り入れることによって1980年代後半にはCISCを大きく引き離す性能となった。半導体プロセスの進歩によってこれらの手法をCISCに導入できるようになるには90年代初頭のPentiumPentium Proまで待たねばならなかったが、以降CISCでも同様の技術が取り入れられ、またCISCの特徴である命令密度の高さゆえにRISCよりも有利となった[要出典]

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

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

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

  • 統一された命令エンコーディング(例えば、オペコードが常に同じビットに位置し、固定命令語長)により、命令デコードが高速
  • レジスタが基本的に全て汎用になっていて、コンパイラの設計が簡単(ただし、整数用と浮動小数点数用レジスタは基本的に別)
  • 単純なアドレッシングモード
  • ハードウェアがサポートするデータ型が少ない(例えば、CISCにはバイトを扱う命令と文字列を扱う命令が存在することもある。他にも多項式とか複素数を扱うものもあった。そのような命令はRISCには見受けられない)

RISCはハーバード・アーキテクチャを実現したものとも言われる。概念的に命令の流れとデータの流れが分離されているからである。つまりこれは特別な同期命令を実行するまで、コードが存在する位置のメモリを書き換えても命令実行に影響しないということである(なぜならCPUは分離された命令キャッシュとデータキャッシュを持っているため)。これによって、命令キャッシュとデータキャッシュは同時にアクセスすることができ、性能向上に寄与する。

初期のRISCの設計にはそれほどすばらしいとは言えない分岐遅延スロットというものがあった。分岐遅延スロットはジャンプ命令や分岐命令の直後の命令のある場所のことである。この場所にある命令は分岐するしないに関わらず実行される(逆に言えば分岐の効力が発揮されるのが遅れる)。これは、分岐実行時もALUに仕事をさせるための手法である。現在ではこれはRISCを実用化するにあたっての良くない副作用と考えられていて、最近のRISCでは存在しなくなっている。

[編集] 初期のRISC

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

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

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

カリフォルニア大学バークレー校のRISCプロジェクトはデイビッド・パターソンの指揮の下1980年に開始された。基本的な考え方はパイプラインと今日レジスタ・ウィンドウとして知られている大胆なレジスタの使用であった。一般的なCPUはレジスタ本数は少数に限られていて、プログラムはそれを自由に使う。レジスタ・ウィンドウを持つCPUでは、128本ものレジスタを持つが、プログラムは一度に8本までしか使えない。プログラムはプロシージャ(ルーチン、関数)ごとに8本のレジスタを割り当てる。そのためプロシージャコールや復帰が極めて高速化される(通常のCPUでは、サブルーチンコール時にレジスタをメモリ(スタック)に退避させ、復帰するときにメモリからレジスタに戻す)。

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

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

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

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

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

[編集] RISCの現状

2007年現在の半導体技術と回路設計技術においては、命令セットの違いによる絶対性能の違いは誤差の範囲に収まっており、RISC対CISCという論争はもはや意味を持たない。既にマイクロプロセッサは、そのマイクロアーキテクチャの実装で優劣を競う時代に突入しているのである[要出典]。2004年、x86アーキテクチャのマイクロプロセッサがSPECintの最高記録を保持しており、SPECfpの最高記録保持者はIBM Power 5プロセッサである[要出典]。現在ではより高性能なCPUの開発はより困難な複雑さが生じるため、ハイエンドのCPUでは開発費用も製造費用(設備投資など)も膨大になり、RISCを採用することによるコスト削減効果は非常に小さく、最も大きなチップメーカ以外はハイエンドCPU開発/製造が不可能となっている。

現在の組み込み市場ではほぼRISCが独占している。この市場ではARM、MIPS、IBM Power PC、Renesas Super-H等が代表的なアーキテクチャである。近年では携帯電話市場向けに低消費電力かつ高速なプロセッサが強く求められ、組み込み向けRISCは活況を呈している。

[編集] 主なRISCプロセッサ

[編集] 現行のプロセッサ

SPARC
バークレーでの研究は直接製品化されることはなかったが、サン・マイクロシステムズはRISC-IIのデザインを使ってSPARCを開発した。また、Pyramid Technologyもミッドレンジのマルチプロセッサ機に使用した。他にも多くの企業がRISC-IIのデザインを利用した。これはサンの新たな機種で広く使われ、RISCの効果を世に知らしめた。これにより、サンは急速に成長し、ワークステーション市場をほぼ独占することになった。しかし90年代後半にワークステーション市場はX86アーキテクチャのPCに敗れ去り消滅した。現在では同社のサーバ専用に少数が生産されている。
MIPS
ジョン・ヘネシーは(一時的に)スタンフォード大学を辞め、MIPSの商用化設計にとりかかるためMIPSコンピュータ・システムズという企業を設立した。最初の製品は第二世代のMIPSチップR2000であった。MIPSのデザインはPlayStationNINTENDO64などのゲーム機でも使われ、最も多く出荷され使われたRISCチップとなった。現在では機器組み込み用のハイエンドのプロセッサとして有名である。
POWER/PowerPC
IBMはRT-PCでの失敗を教訓としてRS/6000をベースとしてPOWERアーキテクチャを設計した。POWERを小規模化したPowerPCでは、IBM固有の様々な命令が排除されてシングルチップ化された。PowerPCは、1994年より2006年までアップルコンピュータMacintoshに使われ、現在では自動車の制御、そして近年のゲーム機等にも多く使われている。
ARM (Acorn→ARM Ltd)
ARM1~3がAcornのArchimedesなどに搭載された後に開発部門がARM社として独立。RISC-CPUの中でも特に消費電力が低く、機器組み込み向けとして各社にライセンス展開し、大きなシェアを誇る。
SuperH日立製作所ルネサステクノロジ
機器組み込み向けで、SH-1~SH-5がある。コードサイズの効率化を狙って固定命令長を16ビットとし、各社の命令セットにも影響を与えた。セガのゲーム機にも使用された。
V850 (NEC
M32R (三菱電機→ルネサステクノロジ)
Atmel AVR

[編集] 収束したプロセッサ

  • PA-RISC (HP):同社のワークステーションで使用された。Itaniumへの移行に伴い、縮小。
  • Alpha (DEC):64ビット構造を取るCPUで、ワークステーションや組み込み用途向け。RISC-CPUの中でも最速を誇ったが、同社がコンパックに買収された後、縮小。さらにコンパックはHPに買収された。開発チームは各社に散り、それぞれ別のRISC CPUに携わっている。

[編集] 終息したプロセッサ

  • i860/i960 (インテル)
  • 88000 (モトローラ):ほとんど売れなかったため、モトローラはほどなくIBMのPowerPCの製造に参加した。
  • 29000 (AMD):1990年代初頭、ポピュラーなRISCプロセッサのひとつだった。

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

[編集] 関連項目

[編集] 脚注

  1. ^ 五島正裕「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.


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -