기본 개념
  • CPU

    • 적은 수의 강력한 코어로 복잡한 명령과 분기 처리를 빠르게 수행하는 데 적합
  • GPU

    • 많은 연산을 병렬로 실행하여 대량의 수치 계산을 처리하는 데 적합
  • GPU 커널(Kernel)

    • GPU 커널은 GPU에서 실행되는 병렬 계산 함수
    • 여러 연산을 하나로 합치는 기술을 Kernel Fusion(커널 융합)

PyTorch의 torch.compile 역시 이러한 융합을 자동 수행할 수 있음. 직접 구현한 커널이 항상 더 빠른 실행 속도를 보장하지 않음.

GPU 내부 구조

개념의미
SMBlock을 배치받아 실행하는 GPU 내부 프로세서
Block여러 Thread를 묶은 실행·협업 단위
Warp일반적으로 32개 Thread를 묶어 실행하는 단위
Thread개별 계산을 수행하는 실행 단위
CUDA에서는 Thread와 Block을 직접 구성하는 경우가 많음.
  • Triton
    • 보통 하나의 프로그램 인스턴스가 처리할 데이터 타일을 정의
WarpBlockTriton
하드웨어 실행 단위스레드 그룹GPU 프로그래밍 언어·컴파일러
32개 Thread여러 Thread여러 GPU 프로그램 인스턴스
명령 병렬 실행작업 분할·협업GPU 커널 구현
NVIDIA에서 32 Thread개발자가 설정처리할 타일 크기를 설정
스레드별 레지스터 등Shared Memory 공유메모리 접근을 컴파일러와 코드로 제어
Block 내부에 존재여러 Warp로 구성컴파일 결과가 Block·Warp를 사용

GPU 성능 핵심: 메모리

커널 최적화의 대표적인 방법은 느린 메모리 접근을 줄이고, 이미 읽은 데이터를 최대한 재사용하는 것

  • Tiling
    • e.g. 행렬곱에서는 입력 행렬의 일부를 타일 단위로 가져와 여러 곱셈에 재사용
개념설명적용 예시
Memory Coalescing인접 스레드가 연속적인 주소에 효율적으로 접근Vector Add
Tiling데이터를 작은 블록으로 나누어 재사용MatMul
Kernel Fusion여러 연산을 하나의 커널로 통합Softmax, LayerNorm
OccupancySM에서 실행 가능한 Warp의 활성화 수준블록·레지스터 설정
  • Memory-bound:

    • 연산보다 데이터 이동이 병목인 상태
  • Compute-bound:

    • 데이터 공급보다 계산 처리량이 병목인 상태
  • Roofline Model:
    커널 최적화에서 계산을 더 빠르게 해야 하는지, 메모리 접근을 줄여야 하는지 판단하는 기준이 되는 식

        • 실현 가능한 연산 성능
        • 최대 계산 처리량
        • 메모리 대역폭
        • 연산 집약도(FLOPs/Byte)

CUDA vs Triton

비교CUDA C++Triton
언어C++ 기반Python 기반 DSL
병렬화Thread·Block을 명시적으로 제어타일·프로그램 단위 기술
최적화낮은 수준의 제어 가능텐서 연산 표현과 최적화에 편리
학습 난이도상대적으로 높음상대적으로 낮음
주요 활용범용 GPU 커널딥러닝 연산 커널
Triton 문법이 Python과 비슷하다고 해서 일반 Python 코드처럼 실행되는 것은 아님.
@triton.jit으로 정의한 코드를 GPU 커널로 컴파일