CPU 지역성

jelly·2025년 2월 27일

CPU 캐시 지역성(Locality of Reference)은 프로그램이 데이터를 접근하는 패턴이 CPU 캐시의 성능에 미치는 영향을 설명하는 개념입니다. 지역성에는 크게 공간 지역성(Spatial Locality), 시간 지역성(Temporal Locality), 그리고 순차적 접근성(Sequential Access)이 있습니다.

시간 지역성 (Temporal Locality)

프로그램이 한 번 접근한 데이터는 가까운 미래에도 다시 접근할 가능성이 높다는 특성을 의미합니다.
예를 들어, 루프 내에서 반복적으로 사용되는 변수는 캐시에 유지되므로 성능 향상에 도움이 됩니다.
공간 지역성 (Spatial Locality)

프로그램이 특정 메모리 주소를 접근하면, 그 근처의 메모리도 곧 접근할 가능성이 높다는 개념입니다.
예를 들어, 배열(Array)을 순차적으로 접근할 때, 한 번 로드한 캐시 블록 내의 연속된 데이터도 함께 캐시에 적재되므로 성능이 향상됩니다.
순차적 접근성 (Sequential Access)

프로그램이 데이터를 연속된 메모리 위치에서 순서대로 읽거나 쓰는 경우를 의미합니다.
예를 들어, 배열을 순차적으로 탐색할 때 캐시 효율이 극대화됩니다.

CPU는 메모리보다 훨씬 빠른 속도로 연산을 수행하기 때문에, 매번 RAM에서 데이터를 가져오면 성능이 크게 저하됩니다.
이를 해결하기 위해 CPU 내부에는 L1, L2, L3 캐시가 있으며, 자주 사용하는 데이터는 캐시에 저장하여 빠르게 접근할 수 있습니다.

지역성이 좋으면 캐시 히트(Cache Hit)율이 증가하여 CPU가 빠르게 데이터를 가져올 수 있습니다.
지역성이 나쁘면 캐시 미스(Cache Miss) 발생이 증가하여, 메모리에서 데이터를 가져오는 시간이 증가하고 성능이 저하됩니다.

네, 캐시 효율을 높이기 위해 다음과 같은 최적화 기법을 사용할 수 있습니다.

배열을 순차적으로 접근하기 → for (int i = 0; i < N; i++) arr[i]

랜덤 접근보다 순차 접근이 캐시 효율이 높음
반복문 최적화 (Loop Blocking, Loop Unrolling)

예를 들어, 행렬 곱셈(Matrix Multiplication)을 할 때, 작은 블록 단위로 연산하여 캐시 활용도를 증가시킴
구조체 패딩(Struct Padding)과 정렬(Struct Alignment) 고려

CPU 캐시 라인 크기(일반적으로 64바이트)에 맞게 데이터 정렬
자주 사용하는 데이터는 캐시에 유지되도록 최적화

예를 들어, LRU(Least Recently Used) 캐시 정책을 고려한 데이터 접근 순서 변경

CPU 캐시 지역성은 프로그램이 데이터를 접근하는 패턴을 최적화하여 성능을 향상시키는 중요한 개념입니다.
이를 위해 시간 지역성, 공간 지역성, 순차적 접근을 고려하여 코드 최적화를 하면 캐시 히트율을 높이고 성능을 개선할 수 있습니다.

profile
jelly

0개의 댓글