메모리 접근 패턴이 L1/L2 캐시 활용도에 미치는 영향을 CUDA 커널에서 비교
동일한 연산량과 동일한 데이터 크기를 사용, 접근 패턴만 다른 두 커널을 실행해 시간 차이가 얼마나 발생하는지 측정한다.
두 가지 테스트 커널
1. streaming Pattern
매우 큰 stride 로 계속 먼 주소 접근
동일 cache line 재사용률 낮음
2. Hot Reuse Pattern
thread group 별로 작은 hot region 안에서 반복 접근
동일 cache line 이 L1/L2 에 올라온 뒤 여러 번 재사용됨 , 높은 cache 활용
temporal locality 가 실제 PGU 성능에 미치는 영향은 정량적으로 보여준다.
실험 환경 및 파라미터
| GPU Memory Size | 전체 데이터 64MB (float 16,777,216개) |
| block size | 256 threads |
| grid size | 65536 blocks |
| iters | 256 |
| streaming stride | 4096 elements (16KB) |
| hot region size | 4096 elements (16KB) |
| GPU architecture | sm_86 (Ampere) |
핵심 포인트
- N = 64MB 는 L2 캐시보다 큰 크기 - 전체 데이터는 캐시에 올릴 수 없음
- hot_span = 16KB 는 L1 캐시 크기에 잘 들어가는 수준 - 재사용 패턴에서는 L1/L2 에 쉽게 상주 가능
- stride = 4096 역시 16KB 간격이라 streaming 패턴은 L1/L2 에 걸리더라도 다음 접근 시 다른 line
각 패턴의 메모리 특성 분석
streaming pattern
tid → tid + stride → tid + 2*stride → ...
(단 stride = 4096 elements ≈ 16KB)
매번 전혀 다른 cache line 을 읽게 됨
warp 단위로도 coalescing 이 유지되지 않음
l1/l2 hit 율이 낮을 가능성이 매우 높음 - 대부분 DRAM load
DRAM bandwidth 가 bottleneck 이 되는 구조
Hot Reuse Pattern
각 그룹은 base~base+4096 범위 내에서 계속 반복 접근
(working set = 16KB)
working set 이 L1 에 올려두기에 충분히 작다
접근 패턴이 hot region 내부에서만 반복적으로 이루어짐
cache line 이 한 번 올라오면 여러 번 읽힘
순수항 메모리 계층 활용도 차이만 존재
[streaming] avg time: 28.3621 ms
[hot_reuse] avg time: 20.8155 ms
지금의 hot_reuse 는 타일링을 매우 단순화한 형태
타일 내 재사용이 많기 때문에 성능이 올라간다! - 타일링 원리와 동일
'GPU-KERNEL' 카테고리의 다른 글
| ILP ( Instruction - Level Parallelism ) (0) | 2025.11.18 |
|---|---|
| 다음 추가 개념 리스트 (0) | 2025.11.18 |
| 퀴즈 — Register Pressure & Occupancy & Compiler Behavior (0) | 2025.11.18 |
| occupancy_reg_pressure_test_v3 - 실제 register pressure 에 따른 occupancy 감소 확인, (0) | 2025.11.18 |
| L1 / L2 / Cache 구조 (0) | 2025.11.18 |