Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

フルアソシアティブ方式(フルアソシアティブホウシキ)とは | 意味や読み方など丁寧でわかりやすい用語解説

フルアソシアティブ方式(フルアソシアティブホウシキ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

フルアソシアティブ方式 (フルアソシアティブホウシキ)

英語表記

Full associative cache (フルアソシアティブキャッシュ)

用語解説

フルアソシアティブ方式は、コンピュータのキャッシュメモリにおいて、主記憶(メインメモリ)上のデータをキャッシュメモリのどこにでも自由に配置できる、最も柔軟性の高いデータマッピング方式の一つである。この方式の主な目的は、キャッシュメモリの利用効率を最大限に高め、CPUが求めるデータをキャッシュ内で見つけられる確率(キャッシュヒット率)を向上させることにある。

コンピュータのCPUは非常に高速に動作する一方、主記憶はそれと比較してデータアクセスが遅い。この速度差を埋めるために、CPUと主記憶の間に高速な小容量メモリであるキャッシュメモリが配置される。キャッシュメモリは、主記憶から頻繁にアクセスされるデータを一時的に保存し、CPUが再度同じデータにアクセスする際に、主記憶まで取りに行く手間を省いて高速に提供する役割を担う。主記憶のデータは通常、一定の大きさの「ブロック」または「ライン」と呼ばれる単位でキャッシュに転送される。

フルアソシアティブ方式の最大の特徴は、主記憶のどのブロックでも、キャッシュメモリ内の「どの」キャッシュラインにも自由に格納できる点にある。他の方式(ダイレクトマップ方式やセットアソシアティブ方式)では、主記憶のアドレスの一部を使ってキャッシュ内の格納位置が決まるため、特定のキャッシュラインに複数の主記憶ブロックが割り当てられる可能性がある。これにより、同時に必要となるデータが同じキャッシュラインに割り当てられてしまい、一方が追い出される「衝突ミス(コンフリクトミス)」が発生しやすくなる。しかし、フルアソシアティブ方式では、このような格納位置の制約が一切ないため、キャッシュメモリ全体の中から空いているラインを自由に選択してデータを格納できる。

データがキャッシュに格納される際、主記憶のアドレス情報の一部である「タグ」と呼ばれる識別子と、実際のデータ本体がペアとなってキャッシュラインに書き込まれる。CPUが特定のデータにアクセスしようとすると、まず要求された主記憶アドレスをタグとデータオフセット(ブロック内のデータの位置)に分割する。次に、キャッシュコントローラは、キャッシュメモリ内の「すべての」キャッシュラインに格納されているタグを、要求されたタグと同時に比較する。これは、キャッシュのどの位置に目的のデータが格納されているか分からないため、すべてを調べる必要があるからだ。もし一致するタグが見つかれば、そのキャッシュラインからデータが読み出され、CPUに提供される(キャッシュヒット)。この際、すべてのタグを同時に比較するために、各キャッシュラインには専用の比較回路(コンパレータ)が必要となる。

もし一致するタグが見つからなかった場合(キャッシュミス)、CPUは主記憶から目的のデータを読み出す必要がある。読み出されたデータは、主記憶からキャッシュメモリのブロックとして転送される。この時、キャッシュメモリ内の空いているラインがあればそこに格納されるが、もしすべてのラインが埋まっていた場合は、既存のデータのうちどれかを追い出して新しいデータを格納しなければならない。フルアソシアティブ方式では、キャッシュメモリ全体の中から、最も長く使われていないデータ(LRU: Least Recently Used)や、最も使用頻度の低いデータ(LFU: Least Frequently Used)といった、最も効率的な置換アルゴゴリズムを適用して、追い出すラインを決定できる。この柔軟な置換ポリシーが、高いキャッシュヒット率を維持する上で非常に重要となる。

フルアソシアティブ方式の利点は、その高いキャッシュヒット率にある。データ配置の制約が少ないため、衝突ミスの発生を最小限に抑えられ、限られたキャッシュ容量を最大限に活用できる。これにより、CPUが主記憶にアクセスする回数を減らし、システムの全体的なパフォーマンス向上に貢献する。

しかし、この方式にはいくつかの欠点も存在する。最大の課題は、その実装コストと複雑さである。すべてのキャッシュラインのタグを同時に比較するためには、キャッシュラインの数だけ比較回路が必要となり、さらにそれらを制御する複雑なロジック回路も必要となる。これにより、回路規模が大きくなり、半導体チップの面積が増大し、製造コストが上昇する。また、多数の比較回路が同時に動作するため、消費電力も高くなる傾向がある。さらに、キャッシュの規模が大きくなると、すべてのタグを比較する処理自体に時間がかかり、アクセス速度が低下する可能性もある。

これらの欠点のため、フルアソシアティブ方式は、大容量のCPUキャッシュ(L1、L2、L3キャッシュなど)では、コストや速度の観点からあまり採用されないことが多い。CPUキャッシュでは、一般的にセットアソシアティブ方式がバランスの取れた選択肢として広く利用されている。しかし、比較的小容量でありながら、極めて高いヒット率が求められる特殊なキャッシュ、例えば仮想記憶のアドレス変換を高速化するためのTLB(Translation Lookaside Buffer)などでは、その性能の高さからフルアソシアティブ方式が採用されることがある。このように、フルアソシアティブ方式は最高の性能を提供する可能性がある一方で、その高コストと複雑さから、適用される場面が限られる方式と言える。

関連コンテンツ