Triton 의 가장 큰 장점 — layout 결정의 자동화 — 가 동시에 한계가 되는 자리에서 Gluon 이 들어온다. “Triton 과 같은 syntax, 그러나 layout 을 사용자가 명시적으로 control”. 같은 자리에서 도는 새 추상 — Linear Layouts — 이 — 𝔽₂ 위의 binary matrix 로 — Triton 의 모든 layout (blocked, shared, MMA, swizzle) 을 한 framework 안에 합친다. Peter Bell · Mario Lezcano · Keren Zhou (Triton core, PyTorch) 가 발표한 — 자막은 실패했지만 슬라이드 (gluon.pdf) 와 “Linear Layouts: Robust Code Generation of Efficient Tensor Computation Using 𝔽₂” paper, Triton repo 의 issue / experimental/gluon code 를 근거로 재구성.
Triton 의 핵심 매력 — “tile 단위 op 만 쓰면 layout / scheduling / register 할당이 자동”. 이 자동화가 L001 시점부터 GPU 커널을 짜는 자세를 바꿨다. 그러나 — Hopper / Blackwell 의 새 instruction (TMA, WGMMA, multicast) 이 들어오면서 — “heuristic 이 잡지 못하는 자리” 가 생겼다. 그 자리에서 사용자가 layout 을 직접 control 할 수 있는 — “Triton 과 같은 syntax, 그러나 layout 명시” — 가 Gluon 의 자리.
강의가 던지는 두 개의 질문.
Gluon 은 “Triton 의 대체가 아니라 Triton 안의 lower-level layer”. 일반 Triton 으로 충분한 자리는 그대로, 자동화가 막힌 자리에만 Gluon 으로 내려간다. CUTLASS 로 넘어가지 않고도 Hopper 의 모든 기능을 — 같은 Python 환경에서 — 활용할 수 있게 한다.
Triton 의 사용자 모델은 — “tile 의 shape 만 정하면 layout 은 컴파일러가 결정”. 이 모델이 못 잡는 자리들이 있다. 모두 새 hardware 기능과 연결.
“같은 GEMM 의 Triton 과 CUTLASS 의 throughput 차이가 30%” 같은 보고가 — Hopper 부터 일관되게 보고됨. 원인은 거의 항상 layout / scheduling 의 자동 결정 차이. Gluon 의 motivation 이 정확히 이 격차의 해소.
이 자리들은 — heuristic 이 영원히 못 잡는다 는 게 아니라 — 지금 시점에서 jaw bone 의 자동 결정이 hand-tuned 만큼 좋지 않다. 시간이 가면 일부는 자동화로 다시 옮겨갈 가능성. 단 hardware 의 진화 속도가 너무 빨라서 — “항상 자동화의 한 발 뒤” 라는 격차가 구조적으로 존재.
Gluon 의 위치를 한 줄로 — “Triton 의 layer L0 위에 명시적 layout argument 를 붙인 변형”. tl.load 의 같은 operation 이 — Triton 에서는 자동 layout, Gluon 에서는 사용자가 layout 명시.
같은 backend 라는 사실이 — (1) 학습 곡선이 가파르지 않다 (Triton 코드를 그대로 Gluon 으로 옮겨가며 한 줄씩 변경 가능). (2) 두 stack 을 한 codebase 에서 섞을 수 있다 (자동화로 충분한 자리는 Triton, 정밀한 자리는 Gluon). (3) Triton 의 모든 hardware support 를 그대로 받음.
paper 의 main thesis — “tensor layout 은 𝔽₂ (binary) 위의 행렬로 표현 가능하고, 그렇게 하면 모든 layout 변환이 행렬곱으로 통일된다”. 기존의 blocked / shared / MMA / dot operand 같은 layout 들이 특수 케이스의 행렬이 된다.
현대 GPU 의 hardware 표현은 — power-of-two 에 친화적. tensor 의 element 갯수가 2^N, thread 수가 2^M, register 수가 2^P. 이 모든 자리에서 bit 단위 사고 가 자연스럽다.
Linear Layout 의 정의 — 한 layout 은 (layoutInputs, layoutOutputs) 의 매핑. 좌표의 비트와 출력의 비트가 𝔽₂ 행렬로 연결.
예: “thread index 의 bit i 가 register index 의 bit j 로 mapping” 같은 단순한 규칙이 — 행렬 한 entry 로 표현.
한 layout 에서 다른 layout 으로 변환할 때 — 두 layout 의 행렬을 곱한다 (𝔽₂ 위에서, 즉 XOR 와 AND 로). 결과 행렬이 변환의 cost / pattern.
이게 왜 중요한가 — 기존 Triton 은 layout 별로 특수 conversion 코드가 있었다. N 개 layout 이면 N² 개의 conversion. Linear Layout 으로 통일하면 — 한 알고리즘이 모든 conversion 을 처리. quadratic 복잡도가 풀린다.
“Linear Layouts 를 도입한 후 — Triton 의 layout 관련 버그 여러 개 fix, 새 hardware 추가의 engineering effort 감소”. paper 의 main impact 는 새 layout 의 표현력보다 기존 layout 의 통합.
강의의 가장 구체적인 자리. Hopper 의 producer-consumer pattern 을 Triton 으로 짜는 것 vs Gluon 으로 짜는 것의 직접 대조. 의도적으로 단순화한 의사 코드 — 정확한 API 는 Triton repo 의 experimental/gluon 참조.
# 단순한 GEMM tile
@triton.jit
def gemm_tt(A, B, C, M, N, K,
BM: tl.constexpr,
BN: tl.constexpr,
BK: tl.constexpr):
pid_m = tl.program_id(0)
pid_n = tl.program_id(1)
a = tl.load(A_ptrs) # layout 자동
b = tl.load(B_ptrs) # layout 자동
acc = tl.zeros((BM, BN))
for k in range(0, K, BK):
a = tl.load(...)
b = tl.load(...)
acc += tl.dot(a, b) # MMA layout 자동
tl.store(C_ptrs, acc)
# 명시적 layout · pseudo
@gluon.jit
def gemm_gl(A, B, C, M, N, K, BM, BN, BK):
# shared memory 의 swizzle 명시
smem_a = gl.alloc_shared(
(BM, BK), dtype=fp16,
layout=SwizzledShared(3,0,3))
smem_b = gl.alloc_shared(
(BK, BN), dtype=fp16,
layout=SwizzledShared(3,0,3))
# producer warp: TMA load
if warp_id == 0:
gl.tma_load(A_desc, smem_a, ...)
gl.tma_load(B_desc, smem_b, ...)
gl.barrier_arrive(bar)
# consumer warps: WGMMA
else:
gl.barrier_wait(bar)
acc = gl.wgmma(smem_a, smem_b,
layout=MMALayout(m64n128k16))
gl.store(C_ptrs, acc)
Triton 은 — 짧다. heuristic 이 잡으면 충분히 빠르다. Gluon 은 — 길지만 — heuristic 이 잡지 못하는 자리에서 정확. 학습 path: Triton 으로 짜본 뒤 NCU 로 측정 → heuristic 이 막힌 부분만 Gluon 으로 옮긴다. 처음부터 Gluon 으로 짜는 건 권장되지 않는다 (확인 필요).
실제 API 는 — Triton repo 의 python/triton/experimental/gluon 디렉토리에서 확인. experimental 이라는 단어가 보여주듯 — 2025 시점에서는 active development. API 의 detail 은 빠르게 변할 수 있다.
새 추상이 들어올 때 가장 흔한 문제 — “기존 코드를 다 다시 짜야 하는가”. Gluon 의 답은 아니다. Triton 코드는 그대로 도는 동시에, 일부 함수만 Gluon 으로 바꿔도 된다.
@triton.jit 와 Gluon 의 @gluon.jit 가 같은 파일에 공존.TRITON_INTERPRET, ~/.triton/cache 등 모두 Gluon 에도 적용.2025 시점에서 Gluon 은 active development 중이지만 — 일부 production 사용처가 보이기 시작. 강의 시점에서 거론될 가능성이 큰 사례들.
실전 결정의 한 가지 trick — “이 kernel 의 maintenance window 가 얼마나 긴가”. 짧으면 (research 단계) Gluon, 길면 (production 다년간 도는 stack) CUTLASS 의 깊이 정확한 control 이 가치 있을 수 있음. 단 — Gluon 의 Linear Layouts 가 maturity 를 갖추면 이 결정이 흐려질 가능성.
Gluon + Linear Layouts 가 — Triton 을 “high-level tile DSL” 에서 “high-to-low level full stack” 로 확장. CUTLASS 의 자리를 침범하기보다는, Python 안의 production-grade kernel 작성을 가능하게 하는 frame.
experimental/gluon 의 detail 이 빠르게 변하는 단계. (확인 필요)이 노트의 Gluon 코드 예시 (§ 05) 는 의사코드이며 실제 API 는 Triton repo 의 python/triton/experimental/gluon 에서 확인 필요. Linear Layouts 의 설명 (§ 04) 은 arXiv 2505.23819 paper 의 abstract 와 일반적 𝔽₂ 추상으로부터 정리. 강의 자체의 자막은 실패. 실제 발표 안에서 사용된 정확한 syntax / 행렬 예시는 슬라이드 (gluon.pdf) 정독 + 영상 재시청 필요.