[Triton] LLVM Debug Information에서 커널 인자 누락 수정
PR 링크: triton-lang/triton#9002 상태: Merged | 변경: +381 / -166
들어가며
GPU 커널 디버깅에서 LLVM debug information은 변수 이름, 타입, 소스 위치를 추적하는 데 필수적이다. Triton에서 triton::PointerType이 LLVM::LLVMPointerType으로 변환될 때 pointee 타입 정보가 유실되어, 디버그 정보에서 커널 인자가 올바르게 표현되지 않는 버그가 있었다.
핵심 코드 분석
Pointee 타입 보존 (FuncOpToLLVM.cpp)
After:
static void handleArgPtrDatatype(triton::FuncOp funcOp,
LLVM::LLVMFuncOp &llvmFuncOp) {
FunctionType fty = funcOp.getFunctionType();
for (unsigned i = 0; i < fty.getNumInputs(); ++i) {
auto argType = fty.getInput(i);
if (auto argPtrType = dyn_cast<triton::PointerType>(argType)) {
auto argDType = argPtrType.getPointeeType();
llvmFuncOp.setArgAttr(i, "tt.pointee_type",
mlir::TypeAttr::get(argDType));
}
}
}
변환 시 포인터 인자의 pointee 타입을 tt.pointee_type attribute로 보존한다.
서브루틴 타입 생성 개선
기존에는 빈 DISubroutineTypeAttr만 생성했지만, 이제 함수의 반환 타입과 인자 타입 정보를 포함하여 디버거가 함수 시그니처를 올바르게 표시할 수 있다.
왜 이게 좋은가
- 디버거 지원:
cuda-gdb나rocgdb에서 커널 인자의 타입과 이름을 정확하게 확인 가능 - 타입 정보 보존: PointerType → LLVMPointerType 변환 시 유실되던 정보 복구
- 코드 정리: 중복된 타입 변환 로직을
LLVMDIUtils로 분리하여 재사용
정리
디버그 정보는 프로덕션 성능에 영향을 주지 않으면서 개발자의 생산성을 크게 높인다. 특히 GPU 커널처럼 디버깅이 어려운 환경에서는 정확한 변수 추적이 필수적이다. 이 PR은 381줄을 추가하지만, 그 대부분은 정확한 타입 매핑과 유틸리티 분리에 투자된다.
참고 자료
이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 코드 분석 내용은 실제 PR diff를 기반으로 합니다.
관련 포스트
PR Analysis 의 다른글
- 이전글 [vllm] --max-model-len auto: GPU 메모리에 맞춘 자동 컨텍스트 길이 설정
- 현재글 : [Triton] LLVM Debug Information에서 커널 인자 누락 수정
- 다음글 [Triton] AMD에서 non-integer 타입 atomic-cas 시 컴파일러 크래시 수정
댓글