SuperH シリーズには、キャッシュを搭載しているシリーズがあります。
キャッシュは、プログラム、データのメモリへのアクセスを減らしプログラム動作を高速化する ための機構です。
キャッシュを使用することにより、プログラムは高速化しますが、キャッシュといっても様々な タイプのものがあり、その構造と機能を十分理解することで、さらに効果的なプログラミングが可 能となります。
ここでは、SuperHシリーズに搭載されているいくつかのキャッシュの構造を説明し、キャッシュ を効率的に活用するためのプログラミングについて説明します。
1.用語説明
■キャッシュヒット
CPUが外部メモリをアクセスしようとしたとき、その内容がキャッシュメモリ内にあるかど うかチェックします。キャッシュメモリ内データがある場合をキャッシュヒットといいます。
基本的に、キャッシュヒットした場合は、外部メモリをアクセスすることなく、高速なキャ ッシュメモリをアクセスすることになります。
■キャッシュミス
CPUが外部メモリをアクセスしようとしたとき、その内容がキャッシュメモリ内にあるかど うかチェックします。キャッシュメモリ内にない場合を、キャッシュミスといいます。
■キャッシュフィル
キャッシュミスした場合、CPUはそのメモリの内容をキャッシュに格納しようとします。こ れをキャッシュフィルといいます。
■キャッシュライン長
CPUがキャッシュフィルを行なおうとするとき、アクセスしたメモリ内容だけをキャッシュ に格納するのではなく、前後を含めたある連続した領域をまとめてキャッシュフィルしようと します。この時の領域のサイズをキャッシュのライン長といいます。ライン長は、CPUにより 固定の長さ(サイズ)に決まっています。キャッシュには、このライン長を基本にデータが格 納されています。
■キャッシュサイズ、エントリ数(ライン数)
キャッシュに格納できるデータの容量をキャッシュサイズといいます。
エントリ数(ライン数)、キャッシュライン長とキャッシュサイズの関係は以下のように なります。
(キャッシュサイズ)= (エントリ数)×(キャッシュライン長)
■ライトバックとライトスルー
キャッシュヒット状態で、そのメモリ内容を書き換えようとしたとき、書き換えの方式とし て次の2つの選択肢があります。
(1)キャッシュメモリの内容と、外部メモリの内容を同時に書き換える (2)キャッシュメモリだけを書き換える
(1)の場合は、キャッシュメモリの内容と、外部メモリの内容が必ず一致しています。
この方式をライトスルーといいます。
(2)の場合は、キャッシュメモリに最新のデータが残っているだけで、外部メモリは書き 換えが行われないため、古いデータのままです。よって、この方式を取る場合、そのキ ャッシュエントリ内容が捨てられる前にエントリ内のデータを外部メモリに書き戻しま す。この方式をライトバックといいます。(普通はキャッシュのエントリに対し、一度 でも書き込みがあったかどうかを示すフラグがあり、書き込みがあることを示した場合 のみ、外部メモリに書き戻す仕組みとなっています。)
■キャッシュのコヒーレンシ
外部メモリの内容とキャッシュメモリの内容が一致していることです。
つまり、ライトバック方式でキャッシュを使用した場合には、キャッシュの内容と外部メモ リの内容が一致していない可能性があり、CPU以外のデバイスが外部メモリをアクセス使用 した場合、データ内容が更新されていない為に正しくソフトウエアが動作しません。他のデ バイスが同じメモリをアクセスする(共有メモリを使用する)場合は、ライトスルー方式に するか、または、他のデバイスがアクセスする前に、その領域の該当キャッシュエントリを ソフトウエアで書き戻す必要があります。
■ダイレクトマップ方式
キャッシュの方式の一つです。
基本的に、外部メモリのアドレスから、一義的に、キャッシュメモリのどのアドレスに格納 されるか決まる方式です。外部メモリのオフセット値をとって、そのキャッシュ上のオフセ ットアドレスが同一の場所にデータが格納されます。
あるアドレスのデータが、キャッシュ上のどこに入っているか確認する際には、格納場所 はアドレスから一個所に決まるので、この方式ではハードウエア側の負荷が軽くできます。
ただし、頻繁に使用するメモリのアドレスのオフセットが一致していると、同じエントリの リプレースばかりがされてしまい、逆にほとんど使用されないようなエントリも存在するこ とがあります。
よって、キャッシュが有効に使用されないこともあるためプログラムの配置に注意する必 要があります。
■フルアソシアティブ方式
キャッシュの方式の一つです。
ダイレクトマップとは違い、エントリ上に、外部メモリ上のアドレスすべてとデータが格 納されています。よって、最も長い時間アクセスされていないエントリから、リプレース(LRU 方式)がおこるため、もっともキャッシュを有効に使用することができます。ただし、その 反面、外部メモリのアドレスがどのキャッシュエントリに格納されているかを調べるために は、すべてのキャッシュエントリをチェックする必要がありハードウエアの機構が複雑にな ります。
ますが、その何枚かあるキャッシュのうち、もっとも長い時間アクセスしていないwayを使 う方式です。
そのアドレスが、キャッシュのどこに格納されているか探す場合も、すべてのキャッシュ エントリを探すわけではなく、way数分だけをを探すので、ハードウエア構成もそれほど複 雑になりません。
ちなみに、SH7604,SH7708,7707,7709,7718等は、4 wayセットアソシアティブ方式を採用 しています。