본문 바로가기

GPU-KERNEL

L1 / L2 / Cache 구조

NVIDIA GPU 기준 접근

기본 계층 구조

  1. Registers ( 스레드 전용, 가장 빠름)
  2. Shared Memory + L1 Cache ( 보통 SM 당)
  3. L2 Cache ( 칩 전체에서 공유 )
  4. Global Memory ( HBM/GDDR )

그리고 별도로

  • Constant Cache
  • Tenxture Cache
  • Local Memory

 

L1 Cache

SM 당 하나씩 존재 ( 보통 shared memory 와 자원을 나눠쓰는 구조 )

특징 : warp 가 ld.global 할 때, 우선 L1 에서 찾고, 없으면 L2 로, hit 가 나면 L2/글로벌보다 훨씬 빠름

coalescing 과 밀접한 이유 : L1 은 128 B 캐시라인/세그먼트 단위로 데이터를 끌어온ㄴ다고 보면 됨

warp 의 32 thread 가 float (4B) 32개를 연속으로 읽으면, 딱 128B 한 번

stride 가 크거나 흐트러져 있으면 여러 128B 라인이 필요

 

L2 Cache

칩 전체에 공유되는 큰 캐시

특징 : 여러 SM 이 공통으로 보는 중간 캐시, 서로 다른 커널/SM 에서 같은 데이터를 읽을 때 L2 hit 가 날 수도 있음, 대략 L1 보단 느리지만 DRAM 보단 훨씬 빠른 속도

 

접근 경로

스레드 - 레지스터/Shared - (global load) - L1 - (miss) - L2 - (miss) - DRAM

같은 배열을 여러 번 스캔하는 커널, 첫 번엔 L2/DRAM 에서 끌어로고, 반복할수록 L2 hit 비율이 올라가면서 평균 latency 가 줄어든다.  

huge working set + 랜덤 접근 : L2 도 자꾸 miss - DRAM 레이턴시를 거의 그대로 맞는다.