[Triton] AxisInfo의 divisibility 초기화 로직 문서화 개선
PR 링크: triton-lang/triton#9266 상태: Merged | 변경: +5 / -1
들어가며
Triton의 AxisInfo는 텐서의 각 차원에 대해 divisibility(정렬), contiguity(연속성), constancy(상수성) 정보를 추적하는 분석 패스다. 이 정보는 Coalesce 패스와 load/store 벡터화에서 메모리 접근 정렬을 결정하는 데 사용된다. MulIOp visitor에서 contiguity가 1보다 클 때 divisibility를 1로 리셋하는 코드가 있는데, 기존에는 왜 이렇게 하는지 설명이 부족했다.
핵심 코드 분석
Before
if (lhs.getContiguity(dim) > 1 && rhs.getConstantValue() != 1) {
// Treat [2^n,2^n+1,...]'s divisibility as 1 instead of 2^n
lhsDivisibility = 1;
}
After
if (lhs.getContiguity(dim) > 1 && rhs.getConstantValue() != 1) {
// If the operand is contiguous, the divisibility of the
// sequence drops to 1.
// Example: [4, 5, 6, 7] (base 4 divisible by 4).
// Multiplying by 2 yields [8, 10, 12, 14] (GCD=2).
// Preserving divisibility=4 implies result align 8 (unsafe).
lhsDivisibility = 1;
}
왜 이게 좋은가
- 안전성 이해:
[4,5,6,7]*2 = [8,10,12,14]에서 GCD는 2이지 8이 아니다. divisibility=4를 유지하면 잘못된 정렬 가정으로 불법 메모리 접근이 발생할 수 있다. - 유지보수성: 미래 기여자가 이 코드를 "불필요한 pessimization"으로 오해하고 제거하는 것을 방지한다.
- 구체적 예시: 추상적 설명 대신 숫자 예시로 직관적 이해를 제공한다.
정리
컴파일러의 안전성 가드레일은 "왜 필요한지"가 코드에 명시되지 않으면, 최적화로 오해되어 제거될 위험이 있다. 5줄의 주석 추가가 컴파일러의 정확성을 장기적으로 보호한다.
참고 자료
이 글은 AI 도구의 도움을 받아 작성되었습니다.
관련 포스트
PR Analysis 의 다른글
- 이전글 [triton] CUDA 가변 인자 Pre-compiled Launcher로 커널 런치 오버헤드 제거
- 현재글 : [Triton] AxisInfo의 divisibility 초기화 로직 문서화 개선
- 다음글 [triton] AMD membarFilter에 bufferID 고려 추가
댓글