CPU Cache
CPU Cache는 자주 쓰거나 곧 다시 쓸 가능성이 높은 명령과 데이터를 DRAM보다 가까운 곳에 보관한다. 프로그램은 가까운 주소를 연속으로 쓰는 공간 지역성과 최근 사용한 데이터를 다시 쓰는 시간 지역성을 보이는 경우가 많다. 캐시는 이 성질을 이용해 긴 메모리 대기를 줄인다.
L1은 코어에 가장 가깝고 작으며 명령과 데이터 캐시로 나뉘는 경우가 많다. L2는 더 크지만 접근이 늦고, L3 또는 Last-Level Cache는 여러 코어가 공유하는 설계가 흔하다. 모바일 SoC의 System Level Cache는 CPU뿐 아니라 GPU·NPU·ISP 같은 블록이 공유할 수 있다.
캐시는 보통 고정 크기 Cache Line 단위로 데이터를 옮긴다. 요청한 주소가 캐시에 있으면 Hit, 없으면 Miss다. 연속 접근에서는 한 Line에 함께 들어온 데이터가 도움이 되지만, 큰 배열을 건너뛰며 접근하면 가져온 데이터 대부분을 쓰지 못할 수 있다.
여러 코어가 같은 메모리를 캐시에 보관하면 일관성(Coherence)을 유지해야 한다. 한 코어의 쓰기가 다른 코어에 언제 보이는지와 프로그램이 요구하는 메모리 순서는 별도 규칙으로 관리된다. 공유 데이터에 여러 스레드가 자주 쓰면 캐시 Line이 코어 사이를 오가며 성능이 떨어질 수 있다.
캐시 용량이 크면 Miss를 줄일 수 있지만 접근 지연, 면적, 전력과 열이 늘어난다. 3D 적층 캐시는 패키지 위에 캐시 다이를 쌓아 용량을 늘리지만 열 경로와 제품별 클럭 정책도 함께 달라진다. 캐시 크기 하나만으로 CPU 전체 성능을 비교하지 않는다.
관련: 파이프라인과 비순차 실행, 클럭·대역폭·지연시간