Cache Improvement 2
캐시 주소는 다음과 같다.
태그 | 인덱스 | 블록 변위 |
태그로 집합 내 모든 태그와 병렬로 비교하며 주소를 찾고
인덱스로 집합을 선택한다.
인덱스는 집합의 개수에 따라 그 비트 수가 정해진다.
연관 정도를 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 비트이다.