GPU에 대한 기본 사실
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
데이터 분석, DevOps
대상자
GPU 성능 최적화를 위한 개발자, 데이터 과학자, AI 연구자, DevOps 엔지니어
중급~고급 수준의 내용 포함
핵심 요약
- GPU 성능의 핵심 제한 요소는 메모리 대역폭이며, 이는 메모리 바운드 상태를 유발함
- 연산 집약도(Arithmetic Intensity, AI) 는 13 FLOPs/Byte (A100 GPU 기준)를 임계점으로, 이 값 이상일 경우 계산 바운드 상태로 전환됨
- 성능 최적화 전략으로 Fusion 과 Tiling 이 있으며, 이는 메모리 트래픽 최소화 및 데이터 재사용 극대화에 기여
섹션별 세부 요약
GPU 성능의 메모리 병목
- GPU는 연산 속도가 메모리 접근 속도보다 월등히 빠르므로, 메모리 접근이 성능의 병목이 됨
- A100 GPU 의 임계점은 약 13 FLOPs/Byte 로, 이 값 이하일 경우 메모리 바운드 상태, 이상일 경우 계산 바운드 상태
- NVIDIA A100 은 19.5 TFLOPS (32비트 부동소수점) 성능을 내지만, 메모리 대역폭은 1.5TB/s 수준임
GPU 아키텍처와 연산 단위
- SM (Streaming Multiprocessor) 은 컴퓨팅을 담당하며, Shared Memory (SRAM) 을 통해 캐시 역할 수행
- Warp 는 32개의 스레드로 구성되며, Block 은 SM 내에서 실행되는 스레드 집합
- 커널 의 성능은 메모리 바운드 (데이터 이동 속도에 의해 제한) 또는 계산 바운드 (SM 연산 능력에 의해 제한) 중 하나임
- Roofline 모델 은 AI (연산 집약도) 를 x축, FLOPS/s 를 y축으로 표시해 커널의 실현 성능을 나타냄
성능 최적화 전략
- Fusion 은 여러 연산을 하나의 커널로 합쳐 중간 값을 글로벌 메모리에 저장하지 않고, 레지스터 내에서 연산 처리
- Tiling 은 데이터 재사용을 극대화하기 위해 Shared Memory 에 대형 타일을 적재
- Coalesced Access 는 워프 32개 스레드가 연속된 128바이트 구간에 접근해 메모리 대역폭을 최대화
- Shared Memory 는 32개의 독립된 뱅크 로 구성되어, 행 단위 접근 은 충돌 없음, 열 단위 접근 은 충돌 발생
- 양자화 는 AI 늘리고 연산 성능 향상 가능하며, FP32 → FP16 으로 정밀도 축소 시 메모리 이동량 2배 증가
추가 고려사항
- 점유율(Occupancy) 은 높을수록 대기 시간 최소화 가능
- 스레드 분기 최소화 는 branchless 코드 (예: min, max) 로 구현해야 효과적
- 경계 블록 에서는 패딩 처리 및 guard 조건 을 통해 불필요한 연산 방지
- GPU 성능의 본질적 한계는 메모리 대역폭 과 온칩 연산 능력 의 불균형에 기인
- 성능 향상 은 데이터 재사용 극대화 (타일링) 및 중간 메모리 트래픽 최소화 (Fusion) 로 달성
결론
- GPU 성능 최적화를 위해서는 메모리 대역폭 과 온칩 연산 능력 의 균형을 고려해야 하며, AI 를 향상시키고 Fusion 및 Tiling 전략을 적용해야 한다.
- Shared Memory 의 효율적 활용, Coalesced Access, 양자화 등의 고려사항이 실제 성능에 직접적인 영향을 미치므로, 하드웨어 구조 및 데이터 배치 등 복합적인 고려가 필요하다.