본문으로 건너뛰기

[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를 기반으로 합니다.

댓글