Cache Memory와 Locality 에 대해 설명해보세요.
- 캐시메모리(Cache Memory)
우리가 현재 사용하고 있는 컴퓨터의 구조를 살펴보면, 연산 및 제어장치인 CPU가 주기억장치로부터 연산에 필요한 명령어와 데이터를 가져와서 필요한 연산을 하는 구조로 되어 있다. 또한 주기억장치는 상대적으로 협소하기 때문에 대부분의 저장내용들은 비휘발성 대용량 저장장치인 보조기억장치에 저장을 해둔다. 그간 세 가지 장치 모두 비약적인 발전을 해왔지만, 세 장치 간의 속도 차이는 상당히 벌어져 있는 상태이다.
우선 CPU와 메인메모리 간의 속도차이는 상당히 크며, 메인메모리와 보조기억장치의 속도 차이 역시 수십 배 이상에 달한다. DDR4 기준 메인메모리 대역폭은 약 25~51GB/s에 이르며, DDR5에서는 이를 크게 상회하는 대역폭을 제공한다. 이렇듯 속도차이가 현격하게 나는 장치 사이에 존재하여 속도차이를 보완하는 기억장치를 버퍼(buffer)라고 하는데, 캐쉬(cache)역시 버퍼의 한 일종이라 할 수 있으며, CPU와 메인메모리 사이에 존재하는 SRAM을 우리는 캐쉬메모리(cache memory)라고 부르고 있다.
캐시메모리는 메인메모리보다 훨씬 빠른 접근 속도를 가지므로, CPU가 필요한 데이터를 보다 신속하게 제공하여 CPU와 메인메모리 사이의 속도 차이를 줄여 주는 역할을 한다. 이러한 기능의 핵심은 참조 데이터의 지역성(locality)에 있다.
- 집약성, 지역성(Locality)
Locality란 프로그램은 모든 코드나 데이터를 균등(시간적으로나, 공간적으로나)하게 Access하지 않는다는 특성을 기본으로 한다.
1) Locality의 정의
기억 장치 내의 정보를 균일하게 Access 하는 것이 아닌 어느 한 순간에 특정 부분을 집중적으로 참조하는 특성
2) Locality의 원리
Cache Access Time의 최소화 + Cache Hit ratio의 최대화
Cache Hit ratio = (Hit 수) / 주기억장치 접근의 총수
3) Locality의 종류
① 시간적 Locality : 최근에 참조된 기억장소가 가까운 장래에 계속 참조될 가능성이 높은 성질
- 순환(Looping), 서브 프로그램, LRU (Least Recently Used)
② 공간적 Locality : 최근에 참조된 기억장소와 가까운 기억정보가 가까운 장래에 계속 참조될 가능성이 높은 성질
- Array, Sequential Processing, Pre-fetch
③ 순차적 locality : 따로 분기(branch)가 없는 한 데이터가 기억장치에 저장된 순서대로 순차적으로 인출되고 실행될 가능성이 높음. 일반적으로 순차적 실행과 비순차적 실행의 비율은 5:1
즉 이렇게 참조될 확률이 높은 데이터들을 선인출(pre-fetch)하고 캐쉬 내에 저장하고 있으면 CPU는 상대적으로 느린 메인메모리에 접근하지 않고서도 상대적으로 빠른 캐쉬메모리에서 바로 데이터를 가져다 사용할 수 있는 것이다.
캐시의 성능 요소들
좋은 캐쉬메모리는 항상 CPU가 원하는 데이터를 담고 그때그때 빠르게 CPU에게 공급을 해 줄 수 있어야 할 것이다. CPU가 데이터를 원할 때 캐쉬 메모리 내에 해당 데이터가 존재할 때를 우리는 캐쉬 적중(cache hit)이라고 한다. 그리고 이렇게 적중하는 정도를 캐쉬적중율(hit rate)이라고 부른다.
반면에 해당 데이터가 캐쉬 내에 존재하지 않는 경우, CPU는 원하는 데이터를 찾기 위해 높은 레이턴시를 감수하고 메인메모리에서 데이터를 읽어오게 된다. 대개의 경우, 캐쉬의 성능을 나타내는 것으로 AMAT(Average Memory Access Time : 평균 메모리 접근 시간)을 사용한다.
AMAT = Hit Time + Miss Rate x Miss Penalty
요약하자면, Hit Rate는 높을수록 좋으며, 나머지 Hit Time, Miss Rate, Miss Penalty는 낮을수록 좋다.
커뮤니티 Q&A
위 이론과 관련된 게시글이에요.
이해가 안 되거나 궁금한 점이 있다면 커뮤니티에 질문해 보세요!
게시글 작성하기