본문 바로가기

GPU-KERNEL

ncu 리포트 (.ncu-rep) 생성 & 활용 매뉴얼

0. 전제 

  • 주 피사체 : micro_gemm_4x4_kernel 같은 마이크로 GEMM 커널
  • 목표
    • ncu 로 .ncu-rep 생성
    • Nsight Compute GUI ㅕㅇㄹ어서
    • 필요한 영역별 해석

 

1. ncu 리포트 생성의 큰 그림

1-1. 기본 구조

ncu [옵션들...] -o <output_name> <exe> [exe_args...]
  • 실행 수 ./<output_name>.ncu-rep 생성
  • 이 파일을 Nsight Compute GUI 에서 열어서 분석
ncu -o rep .\02_micro_gemm_4x4.exe
# → rep.ncu-rep 생성

 

1-2. "분야별 문서화"에서 말하는 "분야"기준

  1. 타겟 선택 분야 - 어떤 커널을 찍을 것인가
  2. 수집 영역(섹션) 분야 - 어떤 메트릭/섹션을 리포트에 넣을 것인가
  3. 프리셋(preset) 분야 - --set 으로 대충 묶어서 쓰는 것
  4. 출력/파일 관리 분야 - -o, 여러 커널, 여러 실행, 자동화
  5. GUI 활용 분야 - Speed-of-Lifgt, Memory, Warp stall 등 어디를 볼 지 

 

2. 타겟 선택 분야 : 어떤 커널을 ncu 로 찍을지

2-1. 전체 프로세스에서 모든 커널

ncu -o rep_all --target-processed all .\02_micro_gemm_4x4.exe
  • 장점 : 이 프로그램에서 어떤 커널이 도는지 까지 한 번에 파악 가능
  • 단점 : 잡다한 커널들이 섞일 수 있음

2-2 특정 커널 이름 필터

마이크로커널 튜닝에서 가장 많이 쓰는 패턴

ncu -o rep_gemm --kernel-name "micro_gemm_4x4_kernel" .\02_micro_gemm_4x4.exe
  • --kernel-name
    • 와일드 카드도 가능 : micro_gemm_* (정규식)
  • 장덤
    • 내가 만든 커널만 깔끔하게 찍을 수 있음
    • 리포트 열었을 때 잡음이 거의 없음

 

3. 프리셋 분야 : --set 으로 대충 한 방에

ncu 는 미리 정의된 측정 세트를 제공한다.

3-1. 자주 쓸 것만

  • --set default
    • 가볍도 빠른 기본 세트
  • --set full
    • 웬만한 건 다 들어감
  • --set speedOfLight
    • Roofline, theoretical vs achieved 성능 위주

마이크로 GEMM 최적화에선 그냥

ncu -o rep_full --set full --kernel-name "micro_gemm_4x4_kernel" .\02_micro_gemm_4x4.exe

이거 하나로 대부분 끝남

 

4. 섹션 분야 : 각 분석 영역별 옵션

프리셋은 너무 많은 걸 가져옴 필요 섹션만 뽑기 위해 --section 을 사용

4-1. spped_of_light - 전체 성능 위치 파악

--section "speed_of_light"

여기서 보는 것

  • SM utilization
  • DRAM utilization
  • Tensor/FP32 pipe 활용
  • 이 커널이 메모리 바운드냐, 컴퓨트 바운드냐를 보여줌

 

4-2. memory_workload_analysis - 메모리 계층 분석

--section "memory_workload_analysis"

여기서 보는 것

  • DRAM throughput, L2 throughput
  • L1 / L2 hit ratio
  • Global load/store efficiency
  • 메모리 트랜잭션 크기, coalescing 여부

 

4-3. shared_memory - SMEM 관련

--section "shared_memory"
  • shared memory access 수
  • bank conflict 비율
  • broad cast 여부, SMEM throughput 관련 매트릭

마이크로커널에서 타일 로드 패턴이 제대로 설계됐는지 확인할 때 핵심

 

4-4. instruction_stats - 명령어 구성

--section "instruction_stats"
  • FFMA 비율
  • load/store vs compute 비율
  • 정수/부동/제어 명령어 구성

FMA 패턴 최적화가 제대로 들어갔는지 확인

 

4-5. scheduler - issue slot / IPC

--section "scheduler"
  • warp 스케줄러가 issue 가능한 사이클 대비 실제 issue율
  • IPC 느낌
  • SM 파이프가 놀고 있는지/꽉 찼는지 판단

 

4-6. warp_state_stats - stall 원인 분석

--section "warp_state_stats"
  • warp 가 어떤 이유로 쉬고 있는지
    • memory dependency
    • execution dependency
    • not selected
    • barrirr/sync
  • FMA 패턴, unroll, pieline 실패를 알려주는 섹션

 

5. 출력/파일 관리 분야: -o 와 여러 레포트 전략

5-1. 기본 형식

ncu -o <name> ...

ncu -o gemm_k64 --set full --kernel-name "micro_gemm_4x4_kernel" .\02_micro_gemm_4x4.exe

5-2. 파라미터 튜닝하면서 여러 개 찍을 때

이름에 설정을 포함해서 설정시 편함

 

5-3. 여러 커널이 한 번에 잡힐 때

한 exe 안에 여러 커널이 있을 경우

ncu -o rep --kernel-name-base demangled .\app.exe

정규식 필터링 사용

 

6. 실전형 명령 템플릿

6-1. 그냥 다 가져와서 한 번에 보기

ncu -o gemm_full --set full --kernel-name "micro_gemm_4x4_kernel" .\02_micro_gemm_4x4.exe

 

6-2. 성능 위치 + 메모리 + 공유메모리 + 워프 스톨만 추려서

ncu -o gemm_core --set full --section "speed_of_light" --section "memory_workload_analysis" --section "shared_memory" \
  --section "instruction_stats" --section "scheduler" --section "warp_state_stats" --kernel-name "micro_gemm_4x4_kernel" \
  .\02_micro_gemm_4x4.exe

이것이 마이크로 GEMM 튜닝에서 가장 실전형 세트

 

6-3. shared memory layout 만 보고 싶을 때 (bank conflict 실험용)

ncu -o gemm_smem \
  --section "shared_memory" \
  --kernel-name "micro_gemm_4x4_kernel" \
  .\02_micro_gemm_4x4.exe

 

6-4. FFMA 패턴 + 스케줄러 상태만 확인

ncu -o gemm_fma \
  --section "instruction_stats" \
  --section "scheduler" \
  --kernel-name "micro_gemm_4x4_kernel" \
  .\02_micro_gemm_4x4.exe

 

7. GUI 활용 분야: rep 파일 열어서 무엇을 먼저 볼지

7-1. Step 1 - Speed-of-Light

  • 이 커널이 메모리 바운드인지, 컴퓨트 바운드인지 확인
  • 여기서
    • DRAM이 차 있는데 SM 이 비어 있으면, 메모리 바운드
    • SM 이 차 있고, DRAM 여유 시, 컴퓨트 바운드

7-2. step 2 - Warp State (warp_state_stats)

  • stall 이유 분해
    • Memory dependency
    • Execution dependency
    • Not selected

7-3. Step 3 - Shared memory

  • bank conflict 비율
  • request vs transaction
  • smem layout 이 잘 짜였는지

7-4. step 4 - Instruction & Schedular

  • FFMA / FADD / FMUL 비율
  • IPC/issue slots
  • 정수/주소 계산 비율 체크