なぜCPUにはL1・L2・L3というように複数のキャッシュレベルがあるのか?


「CPUのキャッシュは、L1が32KB、L2が256KB、L3が2MBという風に多層に分かれているが、なぜ、32KB+256KB+2MBのL1キャッシュではダメなのか?」という素朴な疑問に対して、ファビアン・ギーセン氏(ryg)が「1960年代の古いオフィスでの働き方」を例に挙げて明解に回答しています。

Why do CPUs have multiple cache levels? | The ryg blog
https://fgiesen.wordpress.com/2016/08/07/why-do-cpus-have-multiple-cache-levels/

前述の質問に対するショートバージョンの答えは、「それぞれのキャッシュには役割があるから」。大前提として、キャッシュは容量が大きいほどデータ転送速度が遅く、記憶密度が高く、省電力という性質を持つため、必要性に応じて異なる種類のキャッシュを使い分けるのが有利だから、というのが回答です。

ある程度知識があり頭脳明晰な人であれば、ショートバージョンの回答で理解できるかもしれませんが、ほとんど知識を持たない人に分かりやすいようにと、ギーセン氏はオフィスワーカーをたとえ話にして、異なるキャッシュの役割を解説しています。

あなたが1960年代の官僚的な体制をもったホワイトカラーのオフィスワーカーであることを想定してみましょう。当時はもちろんコンピューターなど会社にはなく、必要な資料は紙ベースでファイルケースに入れて管理します。

仕事は「自分専用の机」(「L1キャッシュ」のたとえ)で作業をしますが、頻繁に使ったり後から使う可能性が高いと考える資料はファイルケースに入れて机の上に置いてあります。ファイルケースにはさまざまな資料が含まれていますが、たとえ使う資料が1枚の紙であったとしても、ファイルケースから探し出すために中の資料を取り出して探す必要があるはずです。


オフィスには大量の資料を確保しておく「キャビネット」(「L2キャッシュ」のたとえ)もあります。キャビネットには最近使ったけれど今すぐには使わない資料が並べられています。そして、仕事を効率的にするために、机の上の資料で使わないものはキャビネットケースにしまう習慣です。もちろんキャビネットの資料を再び使うことはできますが、席を離れて取りに行く手間が必要です。さらにはインデックスをたよりに大量の資料の中から目当ての資料を探し出すため時間がかかり、机の上のファイルケースの資料とは比べものにならないほどの面倒さという感じ。


そこで、キャビネットの資料を使う手助けをする「バスター」(「バスの呼び出し」のたとえ)という作業員がいます。机のファイルケースにある資料で使わなくなったものは、バスターに手渡します。バスターは受け取った資料をカートに入れます。バスターはオフィスを巡回しながら、キャビネット整理を求める人がいないかどうかを確認します。もちろんキャビネットから取り出したファイルのありかを知っているのはバスターです。

ときには誰かがキャビネットにはない資料をバスターに要求したものの、その資料がキャビネットになく別の人の机にあるという場合が起こり得ます。そのときにバスターは、無言で机にあるその資料をつかみ取るということはできません。バスターは机の主にその資料を使っているのか使っていないのかを確認して、資料の融通について話し合いを行います。

資料をためておくキャビネットは常に資料で一杯になっています。これは、バスターが回収した資料をキャビネットに戻しておけないことを意味します。ここでバスターがやるべき仕事は、キャビネットケースにスペースを作ること。そこで、バスターはキャビネットの資料をオフィスの地下にある資料保管庫(「L3キャッシュ」のたとえ)に持って行くことになります。


地下の資料保管庫では、資料は段ボール箱にぎっしりと詰め込まれた上で、棚に保管されています。オフィスワーカーのあなたが地下の資料保管庫に足を踏み入れることはありません。地下の資料保管庫とオフィスをバスターが行ったり来たりすることで、資料は必要に応じて必要な場所に移動させるという仕組みです。

これが「CPU」という「オフィス」が入ったビル内での話。オフィスワーカーが働きやすいようにビルは立地の良い場所にありますが、当然ながら家賃は高め。そのため、地下の資料保管庫のスペースにも限りがあり、大量の資料をオフィスにすべて抱え込むことは不可能です。そこで、保管しきれない資料をどうするかというと、会社はオフィスから車で30分ほど離れた郊外の倉庫(メインメモリである「DRAM」のたとえ)を用意してそこに保管することになっています。

バスターの役目は地下の資料保管庫の管理までで、郊外の倉庫との資料のやりとりは別の倉庫管理者の役目。仮に、郊外の倉庫にある資料をオフィスワーカーが要求した場合には、まずはバスターに必要なファイルを伝えて、バスターは地下の資料保管庫に資料がないことを確認すると、倉庫管理者に目当ての資料を教えて、倉庫管理者が倉庫に出向いて資料を探し出してきて、再びオフィスに戻るとバスターに資料を手渡して、バスターからオフィスワーカーは資料を受け取るという流れになり、ものすごく時間がかかることになるというわけです。


ということで、「CPUのキャッシュは、L1が32KB、L2が256KB、L3が2MBという風に多層に分かれているが、なぜ、32KB+256KB+2MBのL1キャッシュではダメなのか?」という質問についてあらためて検討すると、この質問者の提示している代替案は、150メートル幅の机を使うようなものであることが分かります。さらに、このような机ではあまりに大きな机で資料を手に入れるために50メートルも歩いて行くということが起こり得ます。「手を伸ばせばすぐ手が届く」というアクセス性の良さが重要で、大きすぎる机、つまりは複数のキャッシュレベルがひとまとまりではダメというわけです。

さらに、大きな机ではなく小さな机で一人で作業する(キャッシュを共有していない)ことも非常に重要なポイントです。巨大な机でも4人で共有するような場合、自分だけが資料を使うことはできません。資料を手渡しするのに時間がかかり、順番待ちをする場合もあります。L1キャッシュは自分だけが独占できる個別の机であることが重要だというわけです。

・関連記事
「ムーアの法則」の終焉は何を意味するのか? - GIGAZINE

集積回路を使わずにトランジスタだけでコンピュータを自作するとこうなる - GIGAZINE

Intel CPUの歴史を代表モデルで振り返るとこうなる - GIGAZINE

ソニーがPS4の封印された7番目の力を解放して使用可能なCPUリソースが増加した模様 - GIGAZINE

Intel CPUの10年分の進化を数値で徹底的に比較するとこうなる - GIGAZINE

半導体メーカーのAMDはいかにして成り上がり没落していったのか - GIGAZINE

モバイル端末のCPUコアはどのような動きをしているのかを可視化するとこうなる - GIGAZINE

in ハードウェア, Posted by logv_to