Cache Arrangement
- 캐시 안에 데이터는 어떻게 정렬/저장되는가.
1. Direct Mapped Cache
- Memory 주소가 캐시 특정 location에 directly mapping 된다.
2. Fully Associative Cache
- Data가 cache 내 어디든지 위치될 수 있다.
3. N - way Set Associative Cache
- Data가 cache내 특정 set 안에서는 어디든지 위치할 수 있다.
Direct Mapped Cache
- 각 Memory Block은 하나의 Single Cache Block에 Mapping 된다.
- 따라서 캐시 내의 entry에 다른 Memory block이 mapping 될 수 있다
→ 항상 동일한 data가 mapping 되는 것이 아님.
- 따라서 Tag를 추가하여, 어떤 data를 정확하게 저장하고 있는지를 확인해야 한다.
e.g. address가 5bit라면 LSB 3bit를 index, 나머지 2bit를 tag로 사용.
- 추가적으로 cache에 있는 data가 유효한 data가 맞는지 확인하기 위한 valid bit가 있어야 한다.
위 이미지를 예시로 Address mapping을 설명해 보면
1. 4 byte 단위로 data를 불러오기 때문에 LSB 2bit의 경우 byte offset이다.
2. 현 상황에서는 Blcok size가 16B이기 때문에 Block offset 또한 2bit이다.
3. 해당 offset bit를 통해 mux로 원하는 data를 select 한다.
4. Cache size / blcok size = index 수 이므로 block size가 커지면 index 수가 작아진다.
Direct Mapped Cache Problem
- Cache Miss 종류 (a.k.a 3C)
1. Cold Miss (Compulsory Miss)
- 무조건 한 번은 발생하는 미스로 access 하려는 Memory address를 처음 access 할 때 발생하는 Miss이다.
- 해결책으로는 Block Size를 늘리는 것이다 ( Cache index 만큼 Cold Miss가 발생하는 것이기 때문 )
2. Confilict Miss
- 참조해야 할 Entry에 다른 Data가 있어 발생하는 Miss이다.
- 해결책으로는 Cache Size를 늘리거나, Associativity를 늘리는 것이다.
3. Capacity Miss
- Cache가 꽉 차서 발생하는 Miss이다.
- 해결책으로는 Cache Size를 늘리는 방법이 있다.
따라서 Direct Mapped Cache의 경우 동인 Entry에 지속적 다른 address로 access 할 경우 Confilict Miss가 지속적으로 발생하기 때문에 성능이 크게 하락할 가능성이 높다.
Fully Associative Cache
- Index가 없는 버전으로 각 Entry에 모든 주소로부터 온 Data가 저장될 수 있도록 함
- 그렇기 때문에 Conflict Miss가 발생하지 않고 Capacity Miss만 발생하게 된다.
- 하지만 모든 Entry의 Cache Tag를 비교해야 필요로 하는 Data를 찾을 수 있다.
N-way Set Associative Cache
- N개의 Entry가 각 Index에 할당된다.
→ 즉, N개의 Direct Mapped Cache가 병렬적으로 동작한다고 볼 수 있음
- N-way Set Associative Cache는 n개의 Conflicting Reference를 Caching 한다.
- N은 각 set에 저장할 수 있는 Cache Block의 수이다.
- 하나의 Set에 대해 N번의 comparison만 하면 된다.
- Conflict가 발생하면 어떤 Block을 Replace 할지 정해야 한다 (대부분 LRU 사용)
- N-way set Associative Cache에서
- N = 전체 Cache Entry 수 일 경우 → Fully Associative Cache라고 할 수 있음
- N = 1 → Direct Mapped Cache 라고 할 수 있음
- 같은 Cache 용량에 대해, Associativity가 높아지면, Hit rate가 높아지게 된다 (conflict Miss 감소)
→ 하지만 그만큼 N to 1 Mux에서의 select 하는 데 걸리는 시간이 길어져 (Hit time 증가) 무조건적으로 성능이 올라가는 것은 아니다.
Cache Write Policy
- Write-through
- Cache에 값을 쓸 때마다 Main Memory에 Update
- 따라서 Cache Entry를 쫓아내는 것은 그냥 새 Entry를 불러와 덮어쓰는 것임
- 단순하지만 느리고, Memory Traffic을 증가시킴 (무조건 Memory를 다 들려야 하기 때문)
- Write-back
- Cache에 값을 쓸 때 Main Memory에 바로 Update 하지 않음
- "Dirty bit"를 Cache Entry에 추 가하여 해당 Entry에 있는 Data가 Main Memory에 있는 Data와 다르다는 것을 표시함
- Cache Entry를 쫓아낼 때, "Dirty bit"가 1이라면 Data를 Main Memory에 써주고 나서, 새 Entry를 불러와야 함
- 빠르지만, 구현하기 복잡하고 Consistency 문제를 야기함
Write Buffer for Wirte-through
- 프로세서는 Data를 Cache와 Write Buffer에 둘 다 쓴다.
- 그 후 Memory Controller가 천천히 Buffer에 있는 내용을 Memory에 Update 한다.
- 어차피 Data access는 Cache에서 이뤄지기 때문에 update는 천천히 이루어져도 되는 것
Write Buffer
- FIFO (queue 구조임)
- 보통 적은 수의 write 만 저장할 수 있음
- writes의 비율이 1/(DRAM write cycle) 보다 작을 경우 정상 동작함
- 만약 writes의 비율이 1/(DRAM wirte cycle)에 가까워지면 processor stall이 발생함
- write request가 급증하면 발생하는 현상임 (write buffer가 가득 차서 더 이상 저장할 수 없는 경우)
Measuring Performance
-Memory System
- Stall은 Cache Miss Stall과 Write Buffer Stall로 구성된다.
- Cache Access Time은 보통 전체 System의 Clock Cycle Time을 결정한다. → Pipeline에서 가장 느린 Functional Unit 중 하나이기 때문이다.
- Memory Stalls은 processor Performance에 영향을 준다.
- CPU time = (CPU cycles + memory stall cycles) * cycle time 이기 때문
- Memory stall cycle = read stall cycle + write stall cycle
'Computer Architecture' 카테고리의 다른 글
Computer Architecture - Memory (3) (0) | 2024.12.30 |
---|---|
Computer Architecture - Memory (1) (1) | 2024.12.26 |
Computer Architecture - Pipeline (0) | 2024.12.26 |
Computer Architecture - Floating Points (0) | 2024.12.23 |
Computer Architecture - Performance (0) | 2024.12.23 |