ストアコンプレッション

例えば文字列をコピーするというような処理を行うと、最初の文字を読み、結果を格納するアドレスのキャッシュラインにその文字の格納を行う。そして、次の文字を読み、同一キャッシュラインの次のバイトに次の文字を書き込むという動作が続く。

図8.3 ストアマージ回路

しかし、このために、毎回、例えば64バイトの長さのキャッシュライン全体をキャッシュメモリから読み出して、格納すべき文字の1バイトだけを書き換え、そしてキャッシュメモリに書き戻すという操作をするのは勿体無い。ということで、最初の書き込みに対して読み出し、書き込みを行ったキャッシュラインのアドレスとデータをレジスタに保持しておき、次の書き込みが同一キャッシュラインである場合には、ストアレジスタに格納されたキャッシュラインだけに書き込みを行うという動作をさせる。

そして、別のキャッシュラインへの書き込み要求が来ると、書き換えられたストアレジスタをキャッシュメモリに書き戻す。このようにすれば、同一キャッシュラインへの書き込みが続いている間は、毎回キャッシュメモリへの読出し、書き戻しを行わず、最初の読出しと別のキャッシュラインをストアレジスタに読み出す前の最後の書き戻しの2回のキャッシュメモリアクセスで済ませることができる。

この方式は、複数のストアを1回にまとめてキャッシュメモリに書き込むので、ストアコンプレッション(Store Compression)とかストアマージ(Store Merge)と呼ばれる。このためにストアアドレス用のレジスタと比較回路、そしてストアレジスタが必要となるが、比較的少ないハードウェアの追加でキャッシュメモリへのアクセス頻度を下げられるので、最近のプロセサでは例外なく用いられている。

また、図8.3は1つのストアレジスタの場合の図となっているが、複数のストアレジスタを持ち、複数のキャッシュラインへのストアマージを並行して実行できる構成も一般的である。