[Triton] translator_helpers에서 builtin 사용 정리
들어가며
Triton-to-Gluon translator는 Triton 커널을 Gluon API로 자동 변환하는 도구다. 기존에는 tl.atomic_add, tl.make_tensor_descriptor 같은 builtin 함수들이 translator_helpers에서 수동으로 재작성(rewrite)되었다. 이 PR은 gluon.constexpr_function 헬퍼를 활용하여 불필요한 rewrite를 제거하고, Gluon API의 실제 버그도 수정한다.
핵심 코드 분석
Before
# 불필요한 수동 rewrite 목록
(tl.atomic_add, "tl_atomic_add"),
(tl.make_tensor_descriptor, "tl_make_tensor_descriptor"),
(tl.load_tensor_descriptor, "tl_load_tensor_descriptor"),
(tl.store_tensor_descriptor, "tl_store_tensor_descriptor"),
After
# atomic_add rewrite 제거 - Gluon이 직접 처리
# make_tensor_descriptor도 Gluon이 직접 처리
Gluon의 atomic_add에서 scalar mask 지원이 추가되었다:
# Before: mask가 tensor일 때만 작동
ttgl.atomic_add(offset + ptr, val, mask=mask)
# After: scalar mask도 지원
scalar_mask = True
ttgl.atomic_add(offset + ptr, val, mask=scalar_mask, sem="acquire", scope="cta")
semantic 쪽에서는 _broadcast_ptr_val_mask 헬퍼로 중복 코드를 제거했다:
def _broadcast_ptr_val_mask(self, ptr, val, mask):
ptr_shape = ptr.shape
if mask is None:
ptr, val = self.broadcast_tensors(ptr, val)
else:
ptr, val, mask = self.broadcast_tensors(ptr, val, mask)
if ptr_shape != ptr.shape:
raise ValueError(...)
return ptr, val, mask
왜 이게 좋은가
- translator 단순화: 수동 rewrite가 줄어 translator 유지보수가 쉬워진다.
- API 버그 수정: Gluon의 atomic/store에서 scalar mask와 broadcasting이 올바르게 동작한다.
- constexpr_function 활용: Gluon의 기능 개선으로 translator의 workaround가 불필요해진 좋은 사례다.
정리
+139/-100 변경으로, Gluon API 개선과 translator 정리를 동시에 달성했다. 하위 레이어의 품질 향상이 상위 레이어의 복잡성을 줄이는 좋은 패턴이다.
참고 자료
이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 코드 분석 내용은 실제 PR diff를 기반으로 합니다.
댓글