CISC と RISC は命令セットアーキテクチャの設計方針です。端的にいうと、アーキテクチャが複雑になってもたくさんの命令をサポートするのが CISC で、命令の種類を少なく保ってアーキテクチャをシンプルにするのが RISC です。これらの方針は一長一短であり、どのようなプロセッサを目指しているかによってどちらを採用すべきかが変わってきます。事実、世の中で普及しているプロセッサには CISC のものと RISC のもの両方が存在します。
CISC は Complex Instruction Set Computer の略です。これは直訳すると「複雑な命令セットコンピュータ」となります。
CISC は非常に多くの命令をサポートする代わりにハードウェアが複雑になるという特性があります。
プログラマからすると命令は多い方が良いように思えますが、命令が複雑なぶん、ハードウェアが複雑になるため、一命令あたりの実行速度が遅くなること、消費電力が大きくなること、プログラマにとって学習が難しいこと、の三つの欠点があります。
CISC の代表的な命令セットアーキテクチャは x86 です。Intel Core シリーズや Intel Xeon シリーズ、AMD Ryzen シリーズなどが x86 のプロセッサです。Windows のパソコンをお使いの方は、おそらく x86 のプロセッサをお使いのことでしょう。
RISC は Reduced Instruction Set Computer の略です。これは直訳すると「縮小命令セットコンピュータ」となります。
RISC は限られた命令しかサポートしない代わりにハードウェアが単純になるという特性があります。
RISC においては CISC とは対照的に、一命令あたりの実行速度は早く、消費電力は小さく、学習は容易になります。
学習が容易になるという利点のため、大学のハードウェアの授業では RISC コンピュータを題材に学習することが多くあります。たとえば世界的なハードウェアの教科書であるコンピュータの構成と設計では MIPS という RISC アーキテクチャを題材に学習が進み、一部の章で x86 という CISC コンピュータが紹介されるという流れになっています。
RISC の代表的な命令セットアーキテクチャは ARM です。ARM プロセッサは洗濯機や冷蔵庫などの組み込み機器に使われているほか、Mac PC や iPhone に搭載されている Apple シリコンも ARM を基にしたアーキテクチャとなっており、モバイル向けのプロセッサである Snapdragon も ARM に基づいたアーキテクチャを使用しています。消費電力が小さいという利点から、組み込み機器やモバイルデバイスでよく用いられています。Mac PC またはスマートフォンをお使いの方は、おそらく ARM をお使いのことでしょう。
CISC と RISC は一長一短であり、一概にどちらが良いとはいえません。ここでは CISC と RISC の比較を行います。
まずはアセンブリプログラマの立場になり、「メモリからデータを読み出し、別の値と掛け合わせてメモリに保存する」という操作を行うことを考えます。
CISC アーキテクチャであれば「メモリからデータを読み出し、別の値と掛け合わせてメモリに保存する」という一つの命令がありこれが一命令で実行できます。
RISC アーキテクチャであれば「メモリからデータを読み出す」「値を掛け合わせる」「メモリにデータを保存する」という三つの命令でこれを実現することになります。
命令の数は CISC アーキテクチャの方が少なくなりますが、ハードウェアが複雑なぶん一つの命令にかかる時間が長くなります。RISC では命令数が多くなりますが、一つの命令にかかる時間は短くなります。全体としてどちらが短くなるかはハードウェア次第です。命令数が三倍になる代わりに一命令の時間が 1/3 未満になるのであれば RISC の方が早く、1/3 よりも大きいならば CISC の方が早いということになります。
また、CISC では命令が複雑な分、行う操作の掛け合わせ的に命令の種類数が多くなり、プログラマがそれぞれの命令を調べるコストや学ぶコストが大きくなります。一方 RISC では命令が単純なので命令を調べるコストは小さく済みます。RISC を用いたプログラムはシンプルなレゴブロックを用いて大きなオブジェを作るというイメージです。
また、ハードウェアを実装する立場になって考えると、CISC では複雑な命令をハードウェアで実現しないといけないので実装は複雑で困難になります。一方 RISC ではハードウェアは単純で済むので実装は比較的容易です。
以下に利点と欠点をまとめます。
CISC | RISC |
ハードウェアは複雑で実装が困難 | ハードウェアは単純で実装が容易 |
アーキテクチャ設計の自由度は高い | シンプルに保つための設計制約が多い |
1 命令でたくさんのことができる | 1 命令でできることは限られている |
1 命令あたりの実行時間は長い | 1 命令あたりの実行時間は短い |
消費電力は大きい | 消費電力は小さい |
学習は難しい | 学習は易しい |
繰り返しですが、CISC と RISC は一長一短であり、一概にどちらが良いとはいえません。
喩えてみると CISC は漢字、RISC はアルファベットのようなものです。漢字は覚えるのは大変ですが、一度覚えると少ない文字数で記述できるので便利です。ただし全体的に画数が多いので文字数が少なくても筆記の手間は多いかもしれません。一方、アルファベットは 26 文字を覚えるのは簡単ですが、組み合わせて使うのに苦労することがあります。また全体的に文字数は多くなります。RISC と CISC の優劣は、漢字とアルファベットのどちらが優れているとは一概に言えないのと同じです。
以上の利点と欠点を踏まえて、適切なアーキテクチャを選べるようになりましょう。
- CISC と RISC は命令セットアーキテクチャの設計方針
- CISC は複雑、RISC は単純
- CISC の例は x86、RISC の例は ARM
- 一長一短なので目的に応じて使い分けられるようにする