Computer Architecture

Computer Architecture - Memory (2)

tangerine0302 2024. 12. 26. 16:06

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


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


Fully Associative Cache

 

- Index가 없는 버전으로 각 Entry에 모든 주소로부터 온 Data가 저장될 수 있도록 함

 

- 그렇기 때문에 Conflict Miss가 발생하지 않고 Capacity Miss만 발생하게 된다.

 

- 하지만 모든 Entry의 Cache Tag를 비교해야 필요로 하는 Data를 찾을 수 있다.


N-way Set Associative Cache


4 - 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

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