View

300x250

Cache Memory


CPU에는 Level 1 Cache, Level 2 Cache, Level 3 Cache 등이 존재한다. ( 발전할수록 추가된다. 현재 L3까지 온 상태! )

  • Lv1 Cache는 32KB로, L1I ( Instruction 저장 ) L1D ( data 저장 ) 두 종류가 있다. CPU내에 각각 존재한다.
  • Lv2 Cache는 256KB로, CPU내에 각각 존재한다. 범용 저장공간에 해당
  • Lv3 Cache는 MB단위, System에 하나 존재한다.

Register와 Memory는 Compiler에 의해 오가지만, Cache와 Memory사이는 HW가 자동으로 오가기에 SW가 필요 없다.

Cache의 필요성


Cache Memory는 메모리에서 레지스터로의 읽고쓰는 성능향상을 위해 둘 사이에 자리를 잡고있다. ( 실제로 큰 성능차이를 보인다 )

Cache와 Main Memory는 크기차이가 2^10배정도차이가 나지만, Cache에서 원하는 데이터를 찾을 확률은 90%정도로 높다. ( 데이터 찾음 : Hit / 데이터 없음 : Miss )

  • Temporal Locality : 같은 Memory Address에 반복접근할 가능성이 높다.
  • Spartial Locality : 근처 Memory Address에 접근할 가능성이 높다.

Cache Architecture


캐시메모리의 구조는 3가지가 있다.

1. Direct-Mapped Cache

가장 단순한 구조. Hit Rate는 낮지만, 빠른 동작을 보여준다.

특정한 데이터들은 특정한 Cache에만 저장 가능하다.

STR 동작원리

Memory를 64Bit로 Logically 구분한다. ( 장치에 따라 32Bit가 될 수도 있다. )

구분된 메모리묶음에 대해서 메모리주소의 마지막 몇 개의 bit가 같은 묶음들은 Cache의 같은 Index 위치에 저장된다.

-> 특정한 메모리들이 하나의 Cache 메모리 칸에 Mapped 되어있다. 이로 인해 같은 칸에 Mapped 되어있는 메모리들은 동시에 Cache에 존재하지 않는다.

메모리의 32Bit Memory Address을 다음 양식으로 읽어온다. [ 남은 Bit | Index Bit | 6 Bit ]

  • 6 Bit : 64Bit를 단위로 자르는데 사용. 하위 6개 Bit를 무시하면 64Bit 단위로 읽어올 수 있다. LDR 과정에서 사용된다.
  • Index Bit : Cache의 Index가 8개라면 3개의 Bit을 이용해 #0 ~ #7을 나타낸다. 64Bit 덩어리를 어디에 저장할 지 나타낸다. ( Index Bit 값은 저장하지 않음. 위치만 나타낸다. )
  • Tag Bit : 뒤에 남은 주소는 Cache의 Tag에 저장된다. ( Cache 한 줄에 공유되는 메모리주소가 Tag임 - 하나만 저장 )

이를 Cache에 저장한다. ( Valid = 1, Tag = TagBit, Data = 메모리주소로부터 64Byte )

LDR 동작원리

Valid가 1인 값 ( 유효한 값 ) 중에 원하는 data의 Memory Address의 Tag Bit을 Index Bit이 가리키는 ( Cache에 저장된 ) Tag와 비교한다.

같은 Tag가 있다면 ( Hit ) 그 칸에 저장된 여러 Data 중에서 MUXs를 이용해 원하는 데이터를 가져온다. ( 여기에서 Address Bit의 마지막 6 Bit 중 일부를 Offset으로 이용한다 - 4 Byte 단위로 자르기 )

한계

Tag가 다르지만 Index가 같은 데이터를 계속 번갈아 접근하면 ( 현재 Cache에 없는 데이터에 접근 ) 메모리에서 반복적으로 메인 메모리에서 데이터를 Cache로 가져와야 하므로, Hit Rate가 낮아져 성능이 떨어진다.

이를 해결하기 위해, 정해진 Index가 아닌 공간 어디에든 저장 가능한 Cache 구조를 설계하였다.

2. Full-Associated Cache

메모리가 Mapped 되어있지 않고, 불러온 Data는 어디에든 저장할 수 있다.

But, Hit Rate는 좋지만 HW적인 Cost가 너무 높다. ( 탐색시간 급증 ) … 잘 사용하지 않는 방식

메모리 Set이 하나이고, Way가 여러 개인 구조. 512개의 Way가 있으면 MUXs에 512개가 한 번에 연결되어있어, 굉장히 복잡한 HW 구조가 된다. 이에, 두 구조를 적절히 섞은 Cache구조를 설계하였따.

3. N-Way Set Associated Cache

Direct-Mapped와 Full-Associated를 적절하게 수용한 구조.

메모리 Set이 여러개 있고, 그 Set 안에 Way가 N개 속해있는 구조. 메인 메모리에서 데이터를 가져왔을 때, 정해진 Set에서 아무 Way에나 저장할 수 있다. ( Direct-Mapped 는 1-Way SA라고 볼 수 있다. )

LDR 동작

원하는 Address Memory와 Set의 Tag가 같을 때, 어떤 Way의 Tag와 같은지, 어떤 데이터를 가져올 지를 MUXs를 이용해 가져온다.

Multiple Level Cache


만약에 캐쉬메모리의 크기가 8MB 정도로 크다면?

CPU가 Cache에서 data를 가져오는데 더 많은 시간을 필요로 하게된다. ( 접근시간 증가 ) 이로 인해, CPU는 다른 작업을 대기시켜놓고 데이터를 가져오는 작업을 수행한다. ( 성능 감소 )

e.g. 수업때마다 사용할 책을 도서관에 보관

이러한 문제가 발생하기 때문에, multiple level of Cache를 사용한다. 큰 Cache에 미리 Data를 Load 해놓고 필요할 때 마다 작은 Cache에 데이터를 로드해 사용한다.

CPU - L1 ( 32KB ) - L2 ( 256KB ) - L3 ( 8MB ) - Memory ( 16GB )

손 - 책상 - 가방 - 내 방 - 도서관

L1 Cache

Access Time이 hit rate 보다 중요하다. ( CPU와 근접하므로 작업속도를 위해 빠르게 동작할 필요가 있다. )

그러기에 Direct-Mapped Cache 구조에 가까운 N-Way SA 사용한다. ( 1CLK > Access Time을 만족하는 N-Way SA를 이용 )

L3 Cache

Hit rate가 Access Time보다 중요하다. ( 이미 access time은 충분히 느리므로, hit rate를 높이는데 주력 )

따라서 Full-Associated 구조를 사용한다. ( 느리더라도, 메모리 직접 탐색보다는 월등히 빠르므로 이를 이용. )


CPU마다 Lv1 Cache를 가지고있기에, 같은 주소에 다른 데이터를 저장할 가능성이 있다.

(Lv1의 같은 주소에 서로다른 데이터를 저장 -> Lv2는 Update되지 않아 서로 꼬이는 경우) : Cache Coherence Problem

=> MESI protocol

Lv1 Cache #1, Cache #2가 참조하는 메모리주소가 같은 경우, 건드리지 않는다.

320x100
Share Link
reply
반응형
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30