English / 日本語
← 基礎編の入口へ戻る 第4章:第2部・契約の書き方で機械が変わる

第4章 CISCとRISC ― 複雑な命令か、単純な命令の積み重ねか

この章のねらい。 第3章の終わりに、「命令の粒が揃っているほど、流れ作業は詰まりにくい」という話をしました。その粒の揃え方をめぐって、CPUの世界には古くから二つの考え方があります。CISCRISCです。この章で、両者の違いと、それぞれの利点・代償を押さえます。そして――契約(命令セット)の書き方が、それを履行する機械の作りを大きく決める、という序章の話を、具体的な形で確かめます。

4.1 二つの設計思想 ― 命令ひとつに、どこまで詰め込むか

分かれ道は、たった一点です。命令ひとつに、どこまで仕事を詰め込むか。たくさん詰め込む流儀を CISC(シスク)、少なく単純に保つ流儀を RISC(リスク)と呼びます。同じ計算をさせるのでも、契約(命令セット)の書き方が、ここで大きく分かれます。

4.2 CISC ― 一個の命令で、たくさんの仕事を

先に、詰め込むほうから。CISC(Complex Instruction Set Computer)は、「一個の命令で、なるべく多くの仕事を片づけよう」という考え方です。たとえば「メモリにある A と B を取ってきて、掛け算し、結果をメモリへ戻す」――この一連を、たった一つの命令でまかなえたりします。

利点は分かりやすい。プログラムを短く書けて、必要な命令の数も少なくて済みます。メモリが高価だった時代には、これは大きな美点でした。

代償もあります。一個の命令が中で何手も動くため、それを読み解くデコーダが複雑になり、命令の長さもまちまちになります。第3章で見た流れ作業(パイプライン)の目で見ると、手順ごとの仕事量が揃わず、ベルトがなめらかに流れません。契約を“リッチ”に書いた分だけ、それを履行する機械が重くなるのです。代表は、パソコンでおなじみの x86 系です。

4.3 RISC ― 単純な命令を、たくさん、速く

もう一方が、命令を単純に保つ流儀。RISC(Reduced Instruction Set Computer)は、「一個の命令には、ごく単純な仕事だけをさせよう」という考え方です。さきほどの「A と B を掛けてメモリへ戻す」なら、RISC はこれを「A を取ってくる/B を取ってくる/掛ける/戻す」という四つの小さな命令に分けます。

命令の数は増えます。けれど、一個ずつが単純で、長さも揃う。だからデコーダは軽く、パイプラインはなめらかに流れます。第1章で見た「載せて・計算して・戻す」のリズム――メモリに触れるのはロードとストアだけ、計算はレジスタの上だけ、という割り切り――は、まさにこの RISC の作法でした。

いまいちばん身近な RISC は、スマートフォンやタブレット、組み込み機器で広く使われている ARM 系――そして、本シリーズで扱う RISC-V です。手のひらの機器の多くは、この RISC の血を引いています。さきほどの x86 が CISC の代表なら、ARMRISC-V は RISC の代表格――そう地図に置いておくと、この先の話が見通しよくなります。(両者の出自と、契約の“持ち主”をめぐる違いは、次の第5章でたどります。)

CISCとRISCの粒度のちがい 同じ「AとBを掛けてメモリへ戻す」仕事を、CISCは一つの命令の中に四つの手順を詰め込む。RISCは値を取る・値を取る・掛ける・しまう、の四つの単純で長さの揃った命令に分ける。 CISC ― 1命令に詰め込む RISC ― 単純な命令を並べる = たった1つの命令 値を取る 値を取る 掛ける しまう ① 値を取る ② 値を取る ③ 掛ける ④ しまう 命令は1個。でも中身は重く、長さもまちまち。 命令は4個。でも1個ずつ軽く、長さも揃う。
同じ仕事でも、契約の書き方は二通り。CISCは一つの命令に詰め込み(左)、RISCは単純な命令を並べる(右)。命令の数はRISCが多いが、一個ずつが軽く、長さも揃うので、流れ作業に向きます。

4.4 ひとつ裏話 ― いまのCISCも、内側ではRISC流に砕いている

「では CISC は時代遅れなのか」というと、そう単純でもありません。いまの x86 系のチップは、外から受け取る複雑な命令(CISC の契約)を、内部でいったん RISC のような単純で小さな操作へ砕いてから実行している、と言われます。つまり、外向きの契約は CISC のまま互換性を守りつつ、内側の機械は RISC 流の利点を取り込んでいるわけです。

ここでも、序章の話が効いてきます。契約(外から見える姿)と、機械(中の作り)は別もの。同じ契約を、まるで違う機械で履行できる――その自由が、こんなところにも現れています。

4.5 まとめ ― 契約の書き方が、機械の作りを決める

どちらが正しい、という話ではありません。何を優先するかという、設計思想の違いです。そして大事なのは――契約の書き方(命令セットの設計)が、それを履行する機械の作りを、かなりの部分まで決めてしまう、ということ。次の第5章では、この RISC の考え方を最初に教科書の形にまとめ、いまの RISC-V の祖先となった MIPS を訪ねます。

この章は、どの判断のための知識か。 自分チップに使うコアは、いまやそのほとんどが RISC、とりわけ RISC-V です。理由は、この章のとおり――単純で粒の揃った命令は、機械が小さく軽く済み、自分の手で実装・検証しやすく、パイプラインにも素直だから。CISC と RISC の違いが腹に落ちると、「なぜ RISC-V コアを選ぶのか」を、自分の言葉で説明できるようになります。序章の“決めることマップ”でいう 「頭脳」 を選ぶ、その理由づけが、ここにあります。