CISC

CISC（しすく、英: complex instruction set computer）は、コンピュータの命令セットアーキテクチャ(ISA)の設計の方向性の一つである。単純な命令を指向したRISCが考案されたときに、対比して（レトロニム）従来のISAは複雑であるとして、"Complex" の語を用いた "CISC" と呼ばれる様になった。典型的なCISCのISAはしばしば、単一の命令で複数の処理を行う、可変長命令である、直交性がある、演算命令のオペランドにメモリを指定できる、などで特徴づけられる。 CISCを採用したプロセッサ(CPU)をCISCプロセッサと呼ぶ。CISCプロセッサに分類されるプロセッサとしては、マイクロプログラム方式を採用したSystem/360、PDP-11、VAXなどや、マイクロプロセッサの680x0、x86などがある。 現在は、x86互換プロセッサがCISCに分類されるが、RISCであるARMアーキテクチャもCISCで特徴付けられる性格を持つ。古くに設計されたミニコンピュータやメインフレームもCISCに分類されるほか、米モトローラ社のMC 680x0 (68K) 系プロセッサもCISCの系譜に含められる。命令語長が可変長であるため、ある一つの命令のデコードが終わらなければ次の命令の語の位置が判らず、複数の命令を同時にデコードするのが困難という欠点が指摘された。 プログラミングでアセンブラ言語が用いられていた頃には豊富なアドレッシングモードを備えて、命令の直交性を備えることが良いと考えられていた。すなわち任意の演算で、どのアドレッシングモードでも使えるのが良いとされた。演算はレジスターレジスタ間演算のほかに、レジスターメモリ演算、メモリ－メモリ演算を備えているのが普通で、オペランドは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に置き換わる」との予測もあったが、実際にはCISCプロセッサの多くは内部的にRISCの技術を採用し、一方でRISCプロセッサの多くは命令数の追加を続けたため、2000年代には技術的な相違はほぼ消滅した。このため現在の「CISC」や「RISC」は、技術的な用語よりも、各プロセッサの歴史的な総称として使われているにすぎない。 「CISC」は「x86およびx64や、伝統的なメインフレームやミニコンピュータの各専用プロセッサなど」、「RISC」は「SPARC、MIPS、ARM、PA-RISC、POWERなどのマイクロプロセッサ」の意味で使われる場合が多い。なおIA-64はPA-RISCの後継でもあるが、EPICアーキテクチャという独自のアーキテクチャを採用しており、RISCには分類しない場合が多い。また32ビットARM（64ビットARMは典型的なRISCに近い）や、POWER・PowerPCはRISCの典型からは外れたアーキテクチャだが、一般的にはどちらもRISCに分類される。 2015年現在の各市場での採用傾向は以下である。 パーソナルコンピュータ市場（PC/AT互換機およびMacintosh）では、CISC(x86)がほぼ独占している（PowerPCやARMを搭載したパソコンも存在するが、シェアは極めて小さい）。 UNIXサーバー市場は、ローエンドはCISC(x86)、ハイエンドは各社RISC（SPARC、POWERなど）が比較的多い。 メインフレーム市場は、CISC（z/Architecture、ACOS、IA-64、x86など）が大多数である。 スーパーコンピュータ市場は、CISC(x86)が約9割、RISC（POWERなど）が約1割であり、ベクトルプロセッサ（NEC SX、演算プロセッサはRISC風の命令セット）搭載のシステムも若干ある。 組み込み市場では、RISCが優勢である。チップサイズ及びフットプリントが小型で、省電力かつ高性能なプロセッサが強く求められるため、32bit以上の比較的高性能なプロセッサではRISCに強みがある。 携帯電話市場はRISC（主にARM）がほぼ独占しているが、スマートフォンには x86 SoCを採用した製品もある。 ゲーム機市場は2013年にRISCの独占は破れて PlayStation 4 と Xbox One がx86に切り替わった。携帯型ゲームは2014年現在も全てRISCである。 （命令セットアーキテクチャ（ISA）が同じ、ないしその派生のプロセッサが生産されているもの。初代モデルなど代表を挙げる） x86 (IA-32) System/360 IBMのz/Architectureプロセッサ - IBM z10など 富士通のGS21/PRIMEFORCE用プロセッサ（独自開発を継続中） 日立のAPシリーズ用プロセッサ（IBMと共同開発し供給を受けている） 680x0 (Coldfire) NEC Vシリーズ - V800シリーズはRISC M16C R8C/Tiny H8 VAX Z8000 TRONCHIP