본문으로 건너뛰기

[공부] CUDA 커널 최적화 — 메모리 접근 패턴 정리

· 약 1분
hwkim-dev
개발자

딥러닝 추론 최적화를 공부하면서 CUDA 커널 작성 시 메모리 접근 패턴이 성능에 얼마나 영향을 주는지 정리해봤습니다.

핵심 개념

Coalesced Memory Access

GPU 글로벌 메모리는 워프(warp) 내 스레드들이 연속된 주소에 접근할 때 하나의 트랜잭션으로 묶어 처리합니다.
비연속 접근(Strided Access)은 트랜잭션 수가 늘어나 대역폭 효율이 급격히 떨어집니다.

Shared Memory 활용

L1 캐시와 물리적으로 같은 온칩 SRAM인 Shared Memory를 타일(tile) 단위로 미리 적재하면 글로벌 메모리 접근 횟수를 대폭 줄일 수 있습니다.

__global__ void matmul_tiled(float *A, float *B, float *C, int N) {
__shared__ float sA[TILE][TILE];
__shared__ float sB[TILE][TILE];
// ...
}

오늘의 실험 결과

구현 방식처리량 (GFLOPS)
Naive (글로벌)42
Coalesced198
+ Shared Memory573

Shared Memory 타일링만 적용해도 약 13.6× 성능 향상을 확인했습니다.

다음 목표

  • Bank conflict 분석 및 패딩 전략
  • __ldg() read-only cache 활용
  • Warp divergence 최소화 패턴