3- 현대 CPU의 연산 속도는 매년 급격히 향상되었지만, DRAM 접근 지연(latency)은 상대적으로 거의 개선되지 않았다
4- 이 격차를 CPU-Memory Gap 또는 Memory Wall이라 부른다 (Wulf & McKee, 1995)
5- 수치로 보면:
6 - CPU 레지스터 연산: ~1 사이클 (< 1ns)
7 - L1 캐시 히트: ~4 사이클
8 - L2 캐시 히트: ~12 사이클
9 - L3 캐시 히트: ~40 사이클
10 - DRAM 접근 (캐시 미스): ~200–300 사이클
11- 즉, 캐시 미스 한 번이 발생하면 CPU는 수백 사이클 동안 아무 일도 하지 못하고 대기한다
12Why — 왜 메모리가 진짜 병목인가?
13- CPU 사용률이 90%여도 실제 유효 처리량(effective throughput)은 10% 이하일 수 있다
14- CPU가 "바쁜 척" 하는 시간의 대부분이 메모리 대기(memory stall)이기 때문이다
15- Intel VTune 등의 프로파일러로 측정하면, 많은 워크로드에서 전체 실행 시간의 50~70%가 메모리 접근 대기로 소비된다 (Hennessy & Patterson, 2019)
16실전 사례 — 메모리 병목이 성능을 지배하는 세 영역
17- 게임 엔진: ECS(Entity Component System) 아키텍처가 등장한 이유 자체가 메모리 지역성 확보. 전통 OOP의 포인터 체이싱(pointer chasing)은 캐시 미스를 폭발적으로 유발한다. Unity DOTS는 데이터를 연속 메모리에 배치해 캐시 히트율을 극적으로 높였다
18- 과학 시뮬레이션: 행렬 곱셈에서 naive 구현과 캐시 친화적 블록(tiled) 구현의 성능 차이는 10배 이상. 알고리즘 복잡도는 동일한 O(n^3)인데 메모리 접근 패턴만 달라도 실측 성능이 완전히 다르다 (Goto & Van De Geijn, 2008)
19- ML 추론: Transformer 모델의 추론 시 attention 연산은 대역폭 제한(memory-bandwidth bound)이다. FlashAttention은 이를 해결하기 위해 SRAM 타일링을 도입해 2~4배 속도 향상을 달성했다 (Dao et al., 2022)
20핵심 수치 — 캐시 미스의 비용
21- 1 FLOP(부동소수점 연산) \approx 0.3ns (현대 CPU)
22- 1 DRAM 접근 \approx 100ns
23- 즉, 메모리 접근 1회 동안 CPU는 약 300회의 연산을 수행할 수 있다
24- 비유: 공장의 조립 로봇(CPU)은 초당 300개 부품을 조립할 수 있지만, 창고(DRAM)에서 부품이 도착하는 데 1초가 걸린다면 로봇은 대부분의 시간을 멈춰 서서 기다린다
25How — 이 레슨에서 배울 것
26- 이 격차를 줄이는 핵심 전략은 데이터 지역성(data locality)과 캐시 친화적 자료구조이다
27- 이후 블록에서 다룰 기법들:
28 - 공간 지역성(spatial locality): 연속 메모리 배치, SoA vs AoS
29 - 시간 지역성(temporal locality): 루프 타일링, 블록 분할
30 - 프리페치(prefetch): 하드웨어/소프트웨어 프리페치 힌트
31 - 캐시 라인 정렬(alignment): alignas, false sharing 방지
32- 핵심 메시지: 알고리즘의 Big-O만으로는 실제 성능을 예측할 수 없다. 메모리 접근 패턴이 상수 계수를 100배 이상 좌우한다