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. "분야별 문서화"에서 말하는 "분야"기준
- 타겟 선택 분야 - 어떤 커널을 찍을 것인가
- 수집 영역(섹션) 분야 - 어떤 메트릭/섹션을 리포트에 넣을 것인가
- 프리셋(preset) 분야 - --set 으로 대충 묶어서 쓰는 것
- 출력/파일 관리 분야 - -o, 여러 커널, 여러 실행, 자동화
- 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
- 정수/주소 계산 비율 체크
'GPU-KERNEL' 카테고리의 다른 글
| Tensorcore_wmma_vs_fp32 test code (0) | 2025.11.27 |
|---|---|
| Tensor Cores & MMA Pipeline (0) | 2025.11.27 |
| CUDA 의 fmaf(), Fused Multiply-Add (FMA) 연산 강제 (0) | 2025.11.25 |
| Micro_gemm_4x4 - cuBLAS micro GEMM skeleton (0) | 2025.11.25 |
| Micro Kernel 입문하기 - 레지스터 기반 1 스레드용 소형 GEMM 엔진 구현 (0) | 2025.11.24 |