Roofline 모델 · NVIDIA Nsight Compute · 교육용 산술 예제

GPU Roofline: 연산 상한과 메모리 대역폭을 함께 보기

FLOP/byte의 분모와 연산 정밀도를 고정하고, 가상의 벡터 덧셈으로 두 상한을 계산합니다.

어느 연산과 어느 메모리 계층인가

산술 집약도 I는 연산 수를 이동한 바이트 수로 나눈 값입니다. FP32와 tensor 연산을 섞거나 DRAM·L2·L1 바이트를 서로 바꿔 대입하면 같은 그래프가 아닙니다. 원소 수만 세어 구한 요청 바이트와 실제 계층을 통과한 바이트도 구분합니다.

Williams·Waterman·Patterson의 2008 Roofline 모델은 캐시에서 걸러진 뒤의 DRAM 트래픽을 기준으로 operational intensity를 정의했습니다. 현대 프로파일러의 계층별 모델을 읽을 때에도 분모를 먼저 명시해야 합니다.

두 상한 중 낮은 쪽을 봅니다

I = FLOP / byte
P_bound = min(P_peak, B_memory * I)
I_ridge = P_peak / B_memory

P는 FLOP/s, B는 byte/s입니다. 집약도가 낮은 영역에서는 대역폭 상한의 영향을 먼저 보고, 교점보다 높은 영역에서는 연산 상한을 봅니다. 이 선은 달성 보장치가 아닙니다. 측정점이 선보다 훨씬 낮으면 명령 의존성·점유율·접근 패턴·작업 크기 등 다른 제약을 더 조사합니다.

자체 계산 흐름: 같은 정밀도와 계층을 유지합니다
  1. 연산 수 ÷ 이동 바이트 → I

  2. B × I와 P_peak 비교

  3. 측정 성능과 낮은 상한의 거리 확인

float32 덧셈을 가정한 계산

C[i]=A[i]+B[i]에서 원소당 두 입력을 각각 4바이트 읽고 출력 4바이트를 쓰며, 선택한 메모리 계층에서 각각 한 번만 이동한다고 가정합니다. 연산은 덧셈 1회, 데이터는 12바이트이므로 I=1/12≈0.0833 FLOP/byte입니다. 캐시 재사용·추가 트랜잭션이 있는 실제 커널의 측정값이 아닙니다.

가상 조건계산
같은 정밀도의 연산 상한30 TFLOP/s
해당 메모리 대역폭 상한1 TB/s = 10¹² byte/s
교점30 FLOP/byte
벡터 덧셈의 대역폭 상한10¹²/12 ≈ 83.3 GFLOP/s

이 숫자는 특정 GPU의 사양이나 벤치마크가 아닙니다. 실제 DRAM 바이트가 가정과 다르면 집약도도 다시 계산합니다. FLOP 이용률에서 전력 소비가 몇 퍼센트인지 도출할 수는 없습니다.

한 커널의 같은 구간을 비교합니다

Nsight Compute의 Roofline 안내처럼 정밀도·tensor 경로와 L1/L2/DRAM의 상한을 맞춥니다. 커널·입력 크기·실행 설정·프로파일러 버전을 기록하고 시간, 실행한 연산 수, 이동 바이트가 같은 대상에 대응하는지 확인합니다. 프로파일링을 위한 재실행·계측 비용이 있을 수 있으므로 서로 다른 실행 상태를 하나의 결과로 합치지 않습니다.

CUDA Best Practices의 대역폭 설명은 요청 바이트와 실제 트랜잭션의 차이를 구분합니다. 실제 이동량이 불필요하게 커졌다면 coalescing과 접근 패턴을, 재사용이 부족하면 데이터 배치·캐시·shared memory 활용을 검토합니다. 바이트 수만 줄인 변경도 명령·동기화 비용을 늘릴 수 있으므로 같은 정확도와 입력으로 시간을 다시 비교합니다.

추론 모델과 실측을 섞지 않습니다

이 글은 Mandar Gurav의 대역폭 설명에서 출발해 모델과 공식 지침을 대조했습니다. 원게시물의 장치 조건 없는 전력 비율·제품 숫자·그림은 사용하지 않았습니다. 모든 HPC·attention 커널을 일괄적으로 대역폭 병목이라 결론 내리지 않습니다. 실제 GPU 실행이나 전력 측정은 하지 않았습니다.

배치와 KV 재사용이 달라지는 예는 Prefill·Decode와 메모리에서, 전체 학습 순서는 병렬 컴퓨팅 길잡이에서 이어집니다.

English summary. Match operation type, precision and memory hierarchy before plotting FLOP/byte. The roofline is a bound, not a guaranteed rate. The 30-TFLOP/s, 1-TB/s example is hypothetical; vector addition gives about 83.3 GFLOP/s under its explicit traffic assumption. No GPU benchmark or power result is claimed.