본문 바로가기

GPU-KERNEL

128B 트랜잭션의 개념 잡기,

128B = 메모리 트랜잭션 단위 ( Load / Store granularity )

즉, 128B = 메모리에서 한 번에 얼마를 가져오는가

 

128B 는 작아보이지만, GPU 메모리 트랜잭션에서는 꽤 큰 단위

coalescing 은 작은 연산에만 적용되는 것이 아닌, 대규모 커널 전체에서 매 사이클마다 반복적으로 발생하는 필수 규칙,

연산의 크기와 별개로, warp 가 한 번에 어떤 패턴으로 로드하느냐가 핵심

 

다루는 텐서가 MB, GB 단위이고, 커널 한 번의 실행으로 수십 ~ 수백 GB/s 메모리 대역폭의 사용, 128 B 는 이에 비해 작아보임

GPU 하드웨어는

L1 / L2 에서 SM 으로 보내는 최소 granularity 를 프로세서의 SIMD 실행 단위와 맞추기 위해 이 정도로 정해둔 것

 

float 4B * 32 threads = 128 B

딱 warp 가 가장 흔히 로드하는 1 element per thread 패턴이 128 B 하나로 깨끗하게 들어감

 

GPU 에선, 큰 연산 전체가 warp 단위로 잘게 쪼개짐, 각 warp 는 매번 128B 단위로 메모리르를 가져옴

 

128B 가 너무 작아서 큰 연산에서 의미가 줄어들지 않나? 에 대해

대형 연산이 수백만 번의 작은 128B 트랜잭션으로 이뤄짐, 그 각각에서 pattern 이 유지되어야 함