命令を実行する:プロセッサーの仕組み

公開日:

このページの目次
  1. 論理ゲートから、プロセッサーへ
  2. 命令を、一つずつ実行する
  3. 計算の部分と、記憶の部分
  4. 作業を重ねて、速くする
  5. メモリとの速さの差を埋める
  6. 頭を増やす:複数のコア
  7. 目的に合わせたプロセッサー
  8. このページのまとめ
  9. 関係する工程と用語
  10. 次に読む
  11. 理解度チェック

論理ゲートと記憶の回路を組み合わせて作るプロセッサーが、命令を取り出し、読み解き、実行する流れを説明する。計算の部分と記憶の部分の役割、作業を重ねて速くする工夫、メモリとの速さの差を埋める工夫、目的に合わせたプロセッサーの種類を扱う。

プロセッサーを速くする工夫(模式図)

  1. 命令一取読実書命令二取読実書命令三取読実書命令四取読実書時間取=取り出す 読=読み解く実=実行する 書=書き戻す作業を重ねる(パイプライン)それぞれの段階が、別々の命令を同時に受け持つ
  2. コアの中キャッシュ外のメモリ(DRAM)保存(フラッシュ)速い小さい遅い大きい記憶の階層よく使う値は、速いキャッシュに置く
図:左は、パイプライン。横が時間の流れで、各行が一つの命令。取り出す・読み解く・実行する・書き戻すの各段階が、別々の命令を同時に受け持つ。右は、記憶の階層。上ほど速く小さく、下ほど遅く大きい。プロセッサーは、よく使う値をキャッシュに置いて、外のメモリまで取りに行く回数を減らす。模式図、本サイトで作成

論理ゲートから、プロセッサーへ

前のページまでで、トランジスタを組み合わせて論理ゲートを作り、論理ゲートを組み合わせて、足し算をする回路と、値を覚える回路を作れることを学んだ。このページでは、それらを組み合わせた大きな回路である「プロセッサー」の仕組みを見ていく。

プロセッサーは、決められた手順(プログラム)に従って、計算や判断をする部品である。スマートフォンやパソコンの中で、全体の動きを受け持つ中心の部品である。

命令を、一つずつ実行する

プログラムは、「この二つの数を足す」「この場所の値を読み出す」「結果がゼロならあの命令へ進む」といった、細かい命令の並びでできている。命令も、デジタルの値の並びとしてメモリに置かれている。

プロセッサーは、次のような流れを、非常に速くくり返して、命令を一つずつ実行していく。

* 取り出す:メモリから、次の命令を読み出す。* 読み解く:命令が何をする命令なのか、どの値を使うのかを読み解く。* 実行する:計算をする部分で、足し算や比べるといった処理をする。* 書き戻す:結果を、記憶の部分やメモリに書き込む。

この流れの一回りの歩調をそろえるのが、前のページで学んだクロックである。

計算の部分と、記憶の部分

プロセッサーの中には、主に次のような部分がある。

計算をする部分は、足し算、引き算、比べる、といった処理をする回路の集まりである。前のページで学んだ足し算の回路を大きく広げたものと考えられる。

計算に使う値や、計算の結果を一時的に置いておく、ごく小さく速い記憶の部分がある。計算をする部分のすぐそばにあり、すぐに値を出し入れできる。

命令を読み解いて、どの部分をどのように動かすかを指示する部分もある。指揮をとる役割である。

作業を重ねて、速くする

命令を一つずつ、取り出しから書き戻しまで終えてから次へ進むと、ある段階が働いている間、ほかの段階の回路は休んでいることになる。

そこで、作業を重ねる工夫がある。一つ目の命令を読み解いている間に、二つ目の命令を取り出す。一つ目を実行している間に、二つ目を読み解き、三つ目を取り出す。工場の流れ作業のように、それぞれの段階が、別々の命令を同時に受け持つ。これを「パイプライン」と呼ぶ。

さらに、計算をする部分を複数持たせ、互いに関係のない命令を同時に実行したり、先の命令を前もって進めておいたりする工夫もある。こうした工夫で、クロックの一回りあたりにこなせる仕事を増やしている。

メモリとの速さの差を埋める

プロセッサーの計算は非常に速いが、外のメモリ(DRAM)から値を読み出すのには、それと比べて長い時間がかかる。値が届くのを待っている間、プロセッサーは仕事を進められない。

そこで、プロセッサーの中に、よく使う値の写しを置いておく、速い記憶の部分を持たせる。これを「キャッシュ」と呼ぶ。分野「デバイス」で学んだSRAMで作られる。プログラムは、同じ値や、近くの場所の値をくり返し使うことが多いので、キャッシュに写しを置いておけば、多くの場合、外のメモリまで取りに行かずに済む。

キャッシュは、速くて小さいものから、遅めで大きいものまで、何段階かに分けて置かれることが多い。これも、分野「デバイス」で学んだメモリの階層の考え方である。

頭を増やす:複数のコア

クロックを速くすれば、計算は速くなる。しかし、クロックを速くするほど電力が増え、熱も増える。熱の問題から、クロックを速くするだけでは、性能を上げ続けることが難しくなった。

そこで、命令を実行する一組の仕組み(コア)を、一つのチップに複数並べる方法が広がった。複数のコアが、別々の仕事を同時に進めることで、全体として多くの仕事をこなす。ただし、仕事をうまく分けられないプログラムでは、コアを増やしても速くならない。

目的に合わせたプロセッサー

プロセッサーは、得意なことの違いで、いくつかの種類に分けられる。

* 何でもこなす中心のプロセッサー:複雑な判断を含む、いろいろな仕事を順番にこなすのが得意である。* 同じ計算を大量に同時に行うプロセッサー:たくさんの小さなコアで、同じ種類の計算を一斉に進める。もとは画像を描くためのものだったが、AIの計算にも広く使われるようになった。* 特定の計算に絞ったプロセッサー:AIの計算や、映像の処理など、決まった種類の計算だけを、少ない電力で速く行う。

スマートフォンのチップのように、これらの種類のプロセッサーと、メモリの制御、通信の回路などを、一つのチップにまとめたものもある。

このページのまとめ

プロセッサーは、命令を取り出し、読み解き、実行し、結果を書き戻す流れを、クロックに合わせて速くくり返す。計算をする部分、速い記憶の部分、指揮をとる部分からなる。作業を重ねるパイプラインや、外のメモリとの速さの差を埋めるキャッシュで、速さを上げる。熱の問題から、コアを複数並べる方法が広がった。得意なことの違いで、いくつかの種類のプロセッサーが使い分けられている。

  • 用語:HBM:DRAMチップを縦に積み重ね、プロセッサの近くに搭載する高帯域幅のメモリ。

理解度チェック

本文の内容から答えられる問いです。答えを選ぶと、正しいかどうかと解説が出ます。

問1

プロセッサーが命令を実行するときの流れとして、正しい順番はどれか。

答えと解説を見る

答え:2. 取り出す → 読み解く → 実行する → 書き戻す

メモリから命令を取り出し、何をする命令かを読み解き、計算をする部分で実行し、結果を書き戻す。この流れをクロックに合わせてくり返す。

問2

「キャッシュ」の役割として、正しいものはどれか。

答えと解説を見る

答え:2. よく使う値の写しをプロセッサーの中の速い記憶の部分に置き、外のメモリまで取りに行く回数を減らす

外のメモリから値を読み出すのには時間がかかる。よく使う値の写しをキャッシュに置いておけば、多くの場合、外のメモリまで取りに行かずに済む。

問3

一つのチップに複数のコアを並べる方法が広がった理由として、本文で挙げているものはどれか。

答えと解説を見る

答え:1. クロックを速くするほど電力と熱が増え、クロックを速くするだけでは性能を上げ続けにくくなったから

クロックを速くするほど電力と熱が増える。そこで、コアを複数並べて、別々の仕事を同時に進める方法が広がった。ただし、仕事をうまく分けられないプログラムでは速くならない。