キャッシュコヒーレンシ(きゃっしゅこおへれんし)
最終更新:2026/4/27
キャッシュコヒーレンシは、複数のキャッシュが同一のメモリブロックのコピーを保持する際に、それらの間でデータの整合性が保たれている状態のことである。
ポイント
キャッシュコヒーレンシは、マルチプロセッサシステムやマルチコアプロセッサにおいて、性能を最大限に引き出すために不可欠な要素である。不整合が発生すると、誤ったデータに基づく処理が行われる可能性がある。
キャッシュコヒーレンシとは
キャッシュコヒーレンシは、複数のキャッシュが同一のメモリブロックのコピーを保持している状況において、あるキャッシュがそのデータを変更した場合に、他のキャッシュにその変更を反映させるための仕組みです。これにより、すべてのキャッシュが常に最新のデータを保持し、データの不整合を防ぎます。
キャッシュコヒーレンシの必要性
マルチプロセッサシステムやマルチコアプロセッサでは、複数のプロセッサが同時にメモリにアクセスすることがあります。各プロセッサは、高速なアクセスを実現するためにキャッシュを搭載しています。もしキャッシュコヒーレンシがなければ、あるプロセッサがキャッシュ内のデータを変更しても、他のプロセッサのキャッシュには古いデータが残ってしまうため、データの不整合が発生し、プログラムの誤動作を引き起こす可能性があります。
キャッシュコヒーレンシの実現方式
キャッシュコヒーレンシを実現するための主な方式として、以下のものがあります。
- スヌーピングプロトコル: 各キャッシュが他のキャッシュのメモリアクセスを監視し、データの変更を検知して自身のキャッシュを更新します。
- ディレクトリプロトコル: システム全体でキャッシュの状態を管理するディレクトリを設け、データの変更があった場合に、ディレクトリを通じて関連するキャッシュに通知します。
スヌーピングプロトコルは、比較的単純な構成で実現できますが、キャッシュ数が増えると監視の負荷が大きくなります。一方、ディレクトリプロトコルは、キャッシュ数が増えてもスケーラビリティに優れますが、ディレクトリの管理が複雑になります。
キャッシュコヒーレンシの課題
キャッシュコヒーレンシの実現には、いくつかの課題があります。
- オーバーヘッド: キャッシュ間のデータの整合性を維持するために、通信や処理のオーバーヘッドが発生します。
- 複雑性: キャッシュコヒーレンシのプロトコルは複雑であり、設計や検証が困難です。
- スケーラビリティ: キャッシュ数が増えると、キャッシュコヒーレンシの維持が難しくなります。
これらの課題を解決するために、様々な研究開発が行われています。