Cache Improvement 2

1 minute read

캐시 주소는 다음과 같다.

태그 인덱스 블록 변위

태그로 집합 내 모든 태그와 병렬로 비교하며 주소를 찾고
인덱스로 집합을 선택한다.

인덱스는 집합의 개수에 따라 그 비트 수가 정해진다.

연관 정도를 2배 늘리면

  1. 집합 당 블록 수가 2배로 증가한다.
    => 비교기가 2배 더 필요하다.

  2. 집합개수가 반으로 줄어든다. => 인덱스가 1비트 줄어들고 태그가 1비트 늘어난다.

교체할 블록의 선택

직접 사상은 어차피 하나만 저장해서 고려할 필요가 없다.
집합 연관은 집합 내 하나를 빼야 한다.
완전 연관은 캐시 내 모든 것 중 하나를 뺀다.

블록을 교체하는 데에는 두 가지가 있다.

LRU 와 랜덤

LRU 는 가장 오랫동안 사용되지 않은 블록을 교체하는 알고리즘이다.
2-way 집합 연관 캐시까지는 가능하나 그 이상은 구현이 매우 어려워
랜덤하게 빼는 시스템도 있다.

태그 크기 대 집합의 연관 정도

32비트 주소이고 캐시는 4Ki (= 2^12) 바이트, 블록의 크기가 1바이트라 가정할 때

태그는
직접 사상에서 (32 - 12) * 4Ki = 80Ki 비트
2-way 집합 연관에서 (32 - 11) * 2 * 2Ki = 84Ki 비트
4-way 집합 연관에서 (32 - 10) * 4 * 1Ki = 88Ki 비트
완전에서 32 * 4Ki * 1 = 128Ki 비트의 크기를 가진다.

동일 조건 4워드라 가정할 시

블록 개수는 4Ki / 16 이므로 256개이고
블록이 16바이트이므로 4비트 블록 변위를 가진다.

따라서 태그는
직접 사상일 때 256 블록을 다 인덱싱 해야 하므로 8비트 인덱스
(28 - 8) * 256 = 5Ki 비트이고 (28인 이유는 비트 변위 빼야 되기 때문)

2-way 일 때는 2로 나눠서 128집합이므로 7비트,
(28 - 7) * 2 * 128 = 5.25Ki 비트

4-way 일 때는 4로 나눠서 64집합이므로 6비트,
(28 - 6) * 4 * 64 = 5.5Ki 비트

완전 연관은 그런 거 없으므로
28 * 256 * 1 = 7Ki 비트이다.