CPU Cache란?
- CPU와 메인 메모리(RAM) 사이의 속도 차이를 줄이기 위해 CPU 내부에 위치하는 작고 빠른 임시 저장소
- 자주 사용되는 데이터나 명령어 복사본을 저장하여 CPU가 데이터에 빠르게 접근하도록 돕고 성능을 향상시킴

Cache Hit와 Cache Miss
Cache Hit
- CPU가 필요한 데이터가 캐시에 이미 존재하는 경우
- 캐시에서 즉시 가져오므로 메인 메모리에 접근할 필요가 없음
- 데이터 접근 시간이 매우 짧아서 성능이 좋음
Cache Miss
- CPU가 필요한 데이터가 캐시에 없는 경우
- L1 -> L2 -> L3 -> RAM 순서로 조회하며 다음 순서로 갈수록 지연이 커짐
- 가져온 데이터는 보통 캐시에 적재되어 다음 접근에서 히트가 나도록 함
- 캐시가 꽉 차있으면 기존 라인을 교체
Cache Miss의 대표 종류
- Compulsory Miss
- Capacity Miss
- 캐시 용량이 작아서 필요한 데이터를 다 못 담아 생기는 미스
- Conflict Miss
- 캐시 매핑(직접 매핑/세트 연관 등) 때문에 특정 라인에 충돌이 나서 생기는 미스
Cache 지역성
캐시 지역성은 최근에 접근한 데이터(또는 그 주변 데이터)를 가까운 미래에 또 접근할 가능성이 높다는 성질을 이용한 것.
지역성의 2가지 종류
- 시간 지역성(Temporal Locality)
- 방금 쓴 데이터를 곧 다시 사용함
- 예: 반복문 변수, 자주 호출되는 함수의 코드, 자주 참조되는 전역/멤버 변수 등
최근에 쓴 것을 캐시에 두면 다음 접근이 Hit가 나기 쉬움
- 공간 지역성(Spatial Locality)
- 어떤 주소를 썼다면, 그 '근처 주소'도 곧 사용함
- 예: 배열을 0, 1, 2, 3 순서로 훑는 코드, 문자열 처리, 연속 메모리 스캔 등
- 캐시는 데이터를 1바이트씩이 아니라 캐시 라인(64B) 단위로 통째로 가져오는데, 주변 데이터까지 가져오면 다음 접근이 Hit가 나기 쉬움
연속적인 메모리 구조를 가진 vector와 메모리가 흩어져 있는 list의 순회를 비교할 때, vector가 더 빠른 것이 지역성의 원리 때문.