論理ゲートと記憶の回路を組み合わせて作るプロセッサーが、命令を取り出し、読み解き、実行する流れを説明する。計算の部分と記憶の部分の役割、作業を重ねて速くする工夫、メモリとの速さの差を埋める工夫、目的に合わせたプロセッサーの種類を扱う。
プロセッサーを速くする工夫(模式図)
- 作業を重ねる(パイプライン)それぞれの段階が、別々の命令を同時に受け持つ
- 記憶の階層よく使う値は、速いキャッシュに置く
図:左は、パイプライン。横が時間の流れで、各行が一つの命令。取り出す・読み解く・実行する・書き戻すの各段階が、別々の命令を同時に受け持つ。右は、記憶の階層。上ほど速く小さく、下ほど遅く大きい。プロセッサーは、よく使う値をキャッシュに置いて、外のメモリまで取りに行く回数を減らす。模式図、本サイトで作成論理ゲートから、プロセッサーへ
前のページまでで、トランジスタを組み合わせて論理ゲートを作り、論理ゲートを組み合わせて、足し算をする回路と、値を覚える回路を作れることを学んだ。このページでは、それらを組み合わせた大きな回路である「プロセッサー」の仕組みを見ていく。
プロセッサーは、決められた手順(プログラム)に従って、計算や判断をする部品である。スマートフォンやパソコンの中で、全体の動きを受け持つ中心の部品である。
命令を、一つずつ実行する
プログラムは、「この二つの数を足す」「この場所の値を読み出す」「結果がゼロならあの命令へ進む」といった、細かい命令の並びでできている。命令も、デジタルの値の並びとしてメモリに置かれている。
プロセッサーは、次のような流れを、非常に速くくり返して、命令を一つずつ実行していく。
* 取り出す:メモリから、次の命令を読み出す。* 読み解く:命令が何をする命令なのか、どの値を使うのかを読み解く。* 実行する:計算をする部分で、足し算や比べるといった処理をする。* 書き戻す:結果を、記憶の部分やメモリに書き込む。
この流れの一回りの歩調をそろえるのが、前のページで学んだクロックである。
計算の部分と、記憶の部分
プロセッサーの中には、主に次のような部分がある。
計算をする部分は、足し算、引き算、比べる、といった処理をする回路の集まりである。前のページで学んだ足し算の回路を大きく広げたものと考えられる。
計算に使う値や、計算の結果を一時的に置いておく、ごく小さく速い記憶の部分がある。計算をする部分のすぐそばにあり、すぐに値を出し入れできる。
命令を読み解いて、どの部分をどのように動かすかを指示する部分もある。指揮をとる役割である。
作業を重ねて、速くする
命令を一つずつ、取り出しから書き戻しまで終えてから次へ進むと、ある段階が働いている間、ほかの段階の回路は休んでいることになる。
そこで、作業を重ねる工夫がある。一つ目の命令を読み解いている間に、二つ目の命令を取り出す。一つ目を実行している間に、二つ目を読み解き、三つ目を取り出す。工場の流れ作業のように、それぞれの段階が、別々の命令を同時に受け持つ。これを「パイプライン」と呼ぶ。
さらに、計算をする部分を複数持たせ、互いに関係のない命令を同時に実行したり、先の命令を前もって進めておいたりする工夫もある。こうした工夫で、クロックの一回りあたりにこなせる仕事を増やしている。
メモリとの速さの差を埋める
プロセッサーの計算は非常に速いが、外のメモリ(DRAM)から値を読み出すのには、それと比べて長い時間がかかる。値が届くのを待っている間、プロセッサーは仕事を進められない。
そこで、プロセッサーの中に、よく使う値の写しを置いておく、速い記憶の部分を持たせる。これを「キャッシュ」と呼ぶ。分野「デバイス」で学んだSRAMで作られる。プログラムは、同じ値や、近くの場所の値をくり返し使うことが多いので、キャッシュに写しを置いておけば、多くの場合、外のメモリまで取りに行かずに済む。
キャッシュは、速くて小さいものから、遅めで大きいものまで、何段階かに分けて置かれることが多い。これも、分野「デバイス」で学んだメモリの階層の考え方である。
頭を増やす:複数のコア
クロックを速くすれば、計算は速くなる。しかし、クロックを速くするほど電力が増え、熱も増える。熱の問題から、クロックを速くするだけでは、性能を上げ続けることが難しくなった。
そこで、命令を実行する一組の仕組み(コア)を、一つのチップに複数並べる方法が広がった。複数のコアが、別々の仕事を同時に進めることで、全体として多くの仕事をこなす。ただし、仕事をうまく分けられないプログラムでは、コアを増やしても速くならない。
目的に合わせたプロセッサー
プロセッサーは、得意なことの違いで、いくつかの種類に分けられる。
* 何でもこなす中心のプロセッサー:複雑な判断を含む、いろいろな仕事を順番にこなすのが得意である。* 同じ計算を大量に同時に行うプロセッサー:たくさんの小さなコアで、同じ種類の計算を一斉に進める。もとは画像を描くためのものだったが、AIの計算にも広く使われるようになった。* 特定の計算に絞ったプロセッサー:AIの計算や、映像の処理など、決まった種類の計算だけを、少ない電力で速く行う。
スマートフォンのチップのように、これらの種類のプロセッサーと、メモリの制御、通信の回路などを、一つのチップにまとめたものもある。
このページのまとめ
プロセッサーは、命令を取り出し、読み解き、実行し、結果を書き戻す流れを、クロックに合わせて速くくり返す。計算をする部分、速い記憶の部分、指揮をとる部分からなる。作業を重ねるパイプラインや、外のメモリとの速さの差を埋めるキャッシュで、速さを上げる。熱の問題から、コアを複数並べる方法が広がった。得意なことの違いで、いくつかの種類のプロセッサーが使い分けられている。
- 用語:HBM:DRAMチップを縦に積み重ね、プロセッサの近くに搭載する高帯域幅のメモリ。
理解度チェック
本文の内容から答えられる問いです。答えを選ぶと、正しいかどうかと解説が出ます。
問1
プロセッサーが命令を実行するときの流れとして、正しい順番はどれか。
答えと解説を見る
答え:2. 取り出す → 読み解く → 実行する → 書き戻す
メモリから命令を取り出し、何をする命令かを読み解き、計算をする部分で実行し、結果を書き戻す。この流れをクロックに合わせてくり返す。
問2
「キャッシュ」の役割として、正しいものはどれか。
答えと解説を見る
答え:2. よく使う値の写しをプロセッサーの中の速い記憶の部分に置き、外のメモリまで取りに行く回数を減らす
外のメモリから値を読み出すのには時間がかかる。よく使う値の写しをキャッシュに置いておけば、多くの場合、外のメモリまで取りに行かずに済む。
問3
一つのチップに複数のコアを並べる方法が広がった理由として、本文で挙げているものはどれか。
答えと解説を見る
答え:1. クロックを速くするほど電力と熱が増え、クロックを速くするだけでは性能を上げ続けにくくなったから
クロックを速くするほど電力と熱が増える。そこで、コアを複数並べて、別々の仕事を同時に進める方法が広がった。ただし、仕事をうまく分けられないプログラムでは速くならない。