このページの本文へ

ロードマップでわかる!当世プロセッサー事情 第74回

CPUとメモリーの速度差を埋めるキャッシュの基礎知識

2010年10月25日 12時00分更新

文● 大原雄介(http://www.yusuke-ohara.com/)

  • この記事をはてなブックマークに追加
  • 本文印刷

ライトバックキャッシュの採用で
メモリー書き込み待ちも短縮

 かくして、486には8KBのキャッシュがコアに内蔵される事になった。i486DXの場合、総トランジスター数は120万個。8KBのキャッシュは6T SRAM構成の場合、トランジスター数は以下のようになる。

  • 6(T SRAM)×8(bit)×8K(Byte)=38万4千個

 つまり、総トランジスターの32%もの割合を占めることになる(実際はほかにも回路があるので、占める割合はもう少し大きくなる)。たかだか8KBでも、これだけ大きなインパクトがある、ということに注意されたい。

 一方書き込みは? というと、まず最初に実用化されたのが図3に示す「Write Through」(ライトスルー)という方法である。つまりメモリーとキャッシュの両方に対して、同時に書き込むという方法だ。ただし、この方法だとメモリーへの書き込み完了をCPUはじっと待っていなければならず、効率が悪い。

図3

図3 ライトスルーキャッシュの基本的な仕組み。①メモリーに書き込む。②同時にキャッシュにも書き込む

 そこで「Write Back」(ライトバック)と呼ばれる方法が編み出された。これは、CPUはまずキャッシュに書き込み(③)、ついでキャッシュからメモリーに書き戻す(④)という方法だ。

③ CPUからキャッシュにデータを書き込む

④ 次にキャッシュからメモリーにデータを書き込む

 SRAMの場合、書き込みも原則1サイクルで終了するから、DRAMのメモリーに比べると大幅に高速である。もちろん、常時メモリーに書き込みが発生するような場合には間に合わなくなる(キャッシュの容量が不足する)から、最終的にはメモリー書き込みが完了するのを待たなければならない。だが、ある程度のサイズのプログラムではこうしたことは起きにくいために、メモリーへの書き込みもまた高速化されるというわけである。

 余談ではあるが、ではその「ある程度のサイズのプログラム」が満足するキャッシュ容量はどの位か? というのは理論だけでは決めにくく、実際にさまざまなプログラムを走らせて、その際に必要とされるキャッシュ容量を確認する。そのためには、いくつかのサイズのキャッシュをシミュレーション上で用意して、その上で実際のプログラムを走らせて、性能やキャッシュミス率を確認する必要がある。

 こうした作業は、CPUのさまざまなパラメータすべてに言えることであり、これがゆえに新規のアーキテクチャーを立ち上げるのには時間がかかる理由ともなっている。さまざまなアーキテクチャー上の損得を、すべてシミュレーションなどで確認しないといけないのだ。

キャッシュの名簿となる「タグ」領域

 キャッシュの構造面をもう少し詳しく説明しよう。図2の説明では、簡単に「まずCPUはメモリーに対して、読み込み要求を発行する」と書いたが、これがまず大変である。「あるメモリー領域のデータはキャッシュに入っているか否か」を、まずCPU(ようはキャッシュコントローラー)が判断しなければならない。この際に利用されるものが、「Tag」(タグ)と呼ばれる領域だ。

 具体的にタグを含めた使い方を見てみよう(図4-1)。CPUがあるメモリーアドレス(赤)をアクセスしようとした場合、対象のアドレスがタグの中に入っているかどうかを確認する(①)。もちろん初期状態ではキャッシュは空なので、この場合CPUはキャッシュミス(キャッシュ領域に目的のデータがない)と判断する。そうなるとCPUは、メモリーに対してメモリーアドレスを指定して、読み込みアクセスを実行する(②)。

図4-1

図4-1 ①タグ内にメモリーアドレスがあるかを確認。②アドレスを指定してメモリー読み込みを実行

 メモリーアクセスする場合は図4-2のように、メモリーは指定されたアドレスに対するデータをCPUに対して返す(③)。これと同時に、このデータのアドレス(④)をタグに、データの中身をキャッシュ自身に(⑤)それぞれコピーする(これがキャッシュフィル)。

図4-2

図4-2 ③指定アドレスのデータをCPUに送る。④指定アドレスをタグに書き込む。⑤データはキャッシュに書き込む

 一度キャッシュにデータが入ると、後はそこから参照が可能である。CPUからメモリーアドレスを指定してタグを検索すると、すぐにヒットする(図4-3)。そのため、当該するキャッシュから迅速にデータを読み込んで完了できるので、大幅なアクセス時間の軽減が図れる。

図4-3

図4-3 ①タグ内にメモリーアドレスがあるかを確認。②データをキャッシュから読み込み

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン