CISC

ウィキペディアから無料の百科事典

CISC(しすく、: complex instruction set computer)は、コンピュータ命令セットアーキテクチャ(ISA)の設計の方向性の一つである。単純な命令を指向したRISCが考案されたときに、対比して(レトロニム)従来のISAは複雑であるとして、"Complex" の語を用いた "CISC" と呼ばれる様になった。典型的なCISCのISAはしばしば、単一の命令で複数の処理を行う、可変長命令である、直交性がある、演算命令のオペランドにメモリを指定できる[1]、などで特徴づけられる。

CISCを採用したプロセッサ(CPU)をCISCプロセッサと呼ぶ。CISCプロセッサに分類されるプロセッサとしては、マイクロプログラム方式を採用したSystem/360PDP-11VAXなどや、マイクロプロセッサ680x0x86などがある。

概要[編集]

現在は、x86互換プロセッサがCISCに分類されるが、RISCであるARMアーキテクチャもCISCで特徴付けられる性格[注 1]を持つ。古くに設計されたミニコンピュータメインフレームもCISCに分類されるほか、モトローラ社のMC 680x0 (68K) 系プロセッサもCISCの系譜に含められる。命令語長が可変長であるため、ある一つの命令のデコードが終わらなければ次の命令の語の位置が判らず、複数の命令を同時にデコードするのが困難という欠点が指摘された[2][注 2]

プログラミングでアセンブラ言語が用いられていた頃には豊富なアドレッシングモードを備えて、命令の直交性を備えることが良いと考えられていた。すなわち任意の演算で、どのアドレッシングモードでも使えるのが良いとされた。演算はレジスターレジスタ間演算のほかに、レジスターメモリ演算、メモリ-メモリ演算を備えているのが普通で、オペランドは2オペランドまたは3オペランドまで指定できるタイプが多い。つまり、メモリ1の内容とメモリ2の内容を論理積を取ってメモリ3に格納するというようなことが1命令でできる。C言語条件演算子 "?:"はCISCであったPDP-11が備えていた命令の名残りとされる。[要出典]

インデックスアドレッシング時のオフセットも命令で指定されるデータ語長に合わせてスケーリングされることが多い。また、データ語長の異なるデータ間の演算でも演算前に自動的に符号拡張などが行なわれるため、データ長を揃える命令を省略できる場合が多い。データの境界をメモリ上の何処にでも置ける。1命令中で行なう処理が複雑なため、マイクロプログラム方式で実装されることが多い。

構造[編集]

実行ユニットの演算器の幅を1/8語、1/4語、1/2語、1語、2語、3語、4語・・・と、実行速度と回路資源のトレードオフを図りながら自在に構成することが可能で柔軟性を持つ。マイクロプログラム方式にすることで同じインストラクションセットを維持したまま、内部マイクロアーキテクチャを増強していくことができる。マイクロプログラミング方式とはマイクロアーキテクチャたる内部CPUが万能チューリングマシンとして外部CPUをシミュレートすることである。その時点の実装技術で最も有効な内部CPUが外部CPUをシミュレートして後方互換性を維持する。このようにCISCは後方互換性を維持したまま持続的に性能と機能を向上できるアーキテクチャである。

歴史[編集]

初期のCPUは半導体の集積度が低いため、内部の演算器や実行ユニットのbit長がワード長より大幅に短かった。典型的には32bit=1ワードに対して演算器は4bitで8回の演算を繰り返して32bit同士の計算を実行していた。この繰り返し演算が命令における実行ステージを複数のステートに分けて処理していた。このようなアーキテクチャをビットスライスプロセッサと呼び、実行ユニットが4bitの場合に16進アーキテクチャと呼ばれた。

半導体の集積度が向上するにしたがって演算器のビット幅は増加し、CPUの内部構造は変更される。インストラクションセットの互換性を保ったまま内部アーキテクチャを容易に更新するためにマイクロプログラム方式が採用された。CISCは当初から単純なマイクロアーキテクチャで豊富な機能を実現するためにマイクロプログラム方式を使っていた。実行ステージの処理に時間がかかるのでメモリレイテンシは問題ではなかった。メモリ間演算は理にかなっていた。

半導体の集積度が向上し、単一CPUの実行パイプラインが1/8語、1/4語、1/2語、1語実行ユニットと向上したときにRISCコンセプトが標榜された。RISCは1チップに集積されたCMOSマイクロプロセッサが32bit 1ワード実行ユニットで固定されるという前提に立って、単純化した構造で最適化すればCISCに勝てると考えていたようである。しかしCMOS半導体の集積度は向上し続け、スケーリング則により内部クロックは高速化し続けた。相対的にオンチップキャッシュのメモリレイテンシは増え続け、前提はすぐに崩れた。

CISCは引き続きCMOS半導体の集積度の向上に伴って、単一CPUのパイプラインを2語、3語、4語同時実行ユニットに向上した。複数実行ユニットにする方法がスーパースケーラであり、更にその実行ユニット数を向上させる手法がアウトオブオーダ実行投機的実行である。これらは増加したメモリレイテンシの時間を有効利用して、複数可変長パイプライン実行ユニットに対してレジスタリネーミングを割り当てる複雑な内部構造になる。

このように、CISCは半導体の集積度の向上に伴い多数の実行ユニットに自動的に命令パイプラインを割り当てるマイクロアーキテクチャを発達させ、ソフトウェアを書き換えることなく性能の向上を実現してきたが、2004年ごろにはCISCのマイクロアーキテクチャが過度に複雑化したことで演算性能向上は限界に達し、マイクロプロセッサの高速化はマルチコア同時マルチスレッディングSIMDによる性能向上に舵を切っている。これらの並列化手法による性能向上を享受するには、ソフトウェアの書き換えが必要になる。

現状[編集]

1990年代には「CISCはRISCに置き換わる」との予測もあった[3]が、実際にはCISCプロセッサの多くは内部的にRISCの技術を採用[4]し、一方でRISCプロセッサの多くは命令数の追加を続けたため、2000年代には技術的な相違はほぼ消滅した。このため現在の「CISC」や「RISC」は、技術的な用語よりも、各プロセッサの歴史的な総称として使われているにすぎない。

「CISC」は「x86およびx64や、伝統的なメインフレームやミニコンピュータの各専用プロセッサなど」、「RISC」は「SPARCMIPSARMPA-RISCPOWERなどのマイクロプロセッサ」の意味で使われる場合が多い。なおIA-64はPA-RISCの後継でもあるが、EPICアーキテクチャという独自のアーキテクチャを採用しており、RISCには分類しない場合が多い。また32ビットARM(64ビットARMは典型的なRISCに近い)や、POWER・PowerPCはRISCの典型からは外れたアーキテクチャだが、一般的にはどちらもRISCに分類される。

2015年現在の各市場での採用傾向は以下である。

主なプロセッサ[編集]

現行[編集]

(命令セットアーキテクチャ(ISA)が同じ、ないしその派生のプロセッサが生産されているもの。初代モデルなど代表を挙げる)

生産終了[編集]

脚注[編集]

注釈[編集]

  1. ^ AArch64では可変長命令やバンク切り替えなど
  2. ^ フェッチしたコードにつき、全てのワードやバイトごとにそれぞれ命令の先頭であるとみなしてデコードをすすめ、その中から有効なデコード結果の組み合わせを選択するという方式が1995年頃に確立したことから、回路規模を大きくするデメリットがあるものの可変命令長であっても1クロックサイクルで複数の命令をデコードできる。近年のプロセッサは5命令から20命令を一度にデコードできる。

出典[編集]

参考文献[編集]

  • Hisa Ando『プロセッサを支える技術 : 果てしなくスピードを追求する世界』技術評論社、2011年1月25日。ISBN 978-4-7741-4521-1 

関連項目[編集]

外部リンク[編集]