직접 사상 vs 세트 연관 vs 완전 연관 캐시

캐시는 메모리의 각 블록을 어디에 저장할 수 있는지 정해야 합니다. 직접 사상 캐시에서는 각 블록이 들어갈 수 있는 라인이 정확히 하나뿐이어서 단순하고 빠르지만, 두 블록이 같은 라인을 공유하면 충돌이 발생합니다. 완전 연관 캐시에서는 블록을 어디에나 둘 수 있어 충돌은 피하지만 모든 라인과 비교해야 합니다. 세트 연관 캐시는 그 절충안으로, 한 세트 안의 몇 개 웨이 중 어디에나 블록을 둘 수 있습니다. 대부분의 CPU 캐시는 세트 연관 방식입니다.

비교 항목직접 사상세트 연관완전 연관
블록을 둘 수 있는 위치인덱스 비트로 정해지는 정확히 한 라인한 세트 안의 여러 웨이(예: 4개 또는 8개) 중 어느 곳이든캐시 안의 모든 라인
접근당 태그 비교 횟수1회웨이마다 1회(예: 8회)모든 라인을 동시에 병렬로
히트 시간가장 빠름약간 느림가장 느림
하드웨어 비용과 전력가장 낮음중간가장 높음: 라인마다 비교기 필요
충돌 미스가장 빈번웨이 수가 늘수록 감소없음: 강제 미스와 용량 미스만 남음
교체 정책불필요: 선택지가 하나뿐세트 안에서 선택(LRU 또는 근사 방식)모든 라인 중에서 선택
주요 용도작고 단순한 캐시, 일부 마이크로컨트롤러대부분 CPU의 L1, L2, L3 캐시, 보통 4~16웨이TLB, 희생(victim) 캐시 같은 작은 구조

수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.

상황별 선택 기준

직접 사상
히트율보다 단순함, 저전력, 속도가 중요할 때.
세트 연관
대부분의 캐시에서 현실적인 선택으로, 몇 개의 웨이만으로도 적은 비용에 충돌 미스 대부분을 없앨 수 있습니다.
완전 연관
히트율이 매우 중요하고 비교 비용을 감당할 수 있는 아주 작은 구조일 때.

자주 묻는 질문

충돌 미스란 무엇인가요?

다른 캐시 라인이 비어 있는데도 두 블록이 같은 위치로 사상되어 발생하는 미스입니다. 직접 사상 캐시에서 가장 심하고, 완전 연관 캐시에는 없습니다.

8웨이 캐시는 접근할 때마다 태그를 몇 개 비교하나요?

선택된 세트의 웨이마다 하나씩, 모두 8개입니다.

왜 대부분의 CPU 캐시는 세트 연관 방식인가요?

몇 개의 웨이만으로 적은 비용에 충돌 미스 대부분이 사라지는 반면, 완전 연관 캐시는 모든 라인마다 비교기가 필요하기 때문입니다.

완전 연관 캐시는 어디에 쓰이나요?

히트율이 가장 중요하고 비교 비용을 감당할 수 있는 TLB나 희생(victim) 캐시 같은 작은 구조에 쓰입니다.

주요 용어 설명

ダイレクトマップ方式
各アドレスのデータを置けるキャッシュ上の場所が1か所に決まっているキャッシュの構成。回路が単純でヒット時間が短いが、同じ場所を取り合う競合ミスが起こりやすい。
セットアソシアティブ方式
アドレスから決まる1つのセットの中の、複数の場所(ウェイ)のどれにでもデータを置けるキャッシュの構成。nウェイなら各アクセスでn個のタグを並列に比べる。
フルアソシアティブ方式
どのデータもキャッシュ内のどの場所にでも置けるキャッシュの構成。競合ミスは起こらないが、すべてのタグと比べる必要があり、大きなキャッシュには向かない。TLBなどに使われる。
キャッシュライン
キャッシュと下の階層の間でデータを読み書きする単位。キャッシュブロックともいう。多くのCPUでは64バイトで、アドレスの下位ビットがライン内の位置(オフセット)を表す。

관련 비교