gpumode · 강의 아카이브
《GPU Mode》 L089 2025 High priority transcript · failed

cuTile — NVIDIA 의 tile-based GPU programming model

Triton 의 tile 추상이 NVIDIA 안에서 어떻게 다시 정리되었는가. cuTile 은 NVIDIA 의 새 tile-based 프로그래밍 모델 — Python first, MLIR-based, 그리고 NVIDIA 컴파일러 stack(CUTLASS / NVVM / PTX) 와 deeply integrated. Mehdi Amini 와 Jared Roesch 가 깐 cuTile 의 동기, tile abstraction 의 구조, Triton 과의 차이, 컴파일 파이프라인, 그리고 NVIDIA 의 사용자 표면 전략 안에서의 위치를 — 자막 없이 외부 자료로 — 재구성한 학습 노트.

cuTile tile abstraction NVIDIA compiler MLIR Triton-like CuTe PTX
M
Speakers
Mehdi Amini · Jared Roesch
NVIDIA · 컴파일러 / MLIR / TVM · cuTile 디자인 팀
강의 번호
L089
스피커
Amini · Roesch
학습 우선순위
High · 정독
자막
failed · 외부 자료
§ 01강의가 풀려는 문제· why cuTile

“NVIDIA 의 자체 Triton-like DSL” 이 왜 이 시점에 등장했는가

2024–2025 시점 GPU programming 의 사용자 표면은 — 한 마디로 — fragmented. CUDA C++ 의 직접 작성, CUTLASS 의 template, CuTe 의 layout algebra, Triton 의 Python DSL, Helion 의 PyTorch-native, JAX 의 Pallas, OpenAI 의 ttgir. 사용자가 매번 “어떤 도구를 어디에 쓸 것인가” 의 결정에 시간을 쓴다.

이 fragmentation 안에서 NVIDIA 가 풀어야 하는 문제는 분명하다 — 새 hardware 의 새 명령을 사용자에게 가장 빨리 노출하는 길. CUTLASS 가 그 자리였지만 진입 장벽이 너무 높다. Triton 이 빠르게 받아주지만 — 그건 OpenAI 가 끄는 프로젝트. NVIDIA 가 자기 컴파일러 stack 위에서 같은 가치를 직접 제공할 수 있어야 한다는 입장.

  1. cuTile 은 NVIDIA 의 자체 tile-based DSL — Python 표면, MLIR 백엔드, NVIDIA 컴파일러 stack 과 deeply integrated.
  2. Triton 의 사상은 받되, NVIDIA 의 새 명령 (Hopper TMA, Blackwell tensor memory accelerator, 새 mma 변형) 을 가장 먼저 노출.
  3. 같은 사용자 표면 위에서 CuTe 와 cuBLAS 까지 seamless 하게 — DSL 로 짠 커널이 cuBLAS 와 같이 잘 도는 자리.
자료 한계 · 확인 필요

강의 자막 실패. 슬라이드 / repo 폴더 미공개. cuTile 자체가 NVIDIA 의 비교적 새 발표 (2024–2025 사이) 라 외부 자료가 제한적. 이 노트는 — Mehdi Amini (LLVM/MLIR 의 핵심 컨트리뷰터), Jared Roesch (TVM 공동저자, Octo / NVIDIA 합류) 의 background, NVIDIA 의 GTC 발표, MLIR 진영의 일반 지식으로 재구성. 정확한 API / 구현 디테일은 NVIDIA 의 공식 release 가 답.

“Triton 이 사용자 표면을 정의했다 — 이제 NVIDIA 가 그 표면을 자기 컴파일러 stack 안에서 다시 푼다.”강의 재구성
§ 02cuTile 의 동기· NVIDIA 의 tile-based 응답

왜 Triton 만으로는 부족한가

새 hardware 명령 노출 속도
Hopper TMA, Blackwell tensor memory 같은 새 명령은 보통 CUTLASS 에 가장 먼저, Triton 은 분기. NVIDIA 가 Triton fork 에 dependency.
컴파일러 stack 통합
Triton 은 자체 backend (TritonGPU dialect). NVIDIA 의 NVVM / PTX 컴파일러와의 deeper integration 이 자기 stack 에서 가능.
디버그 / 프로파일 도구
Nsight Compute / Nsight Systems 가 cuTile 의 source 위치까지 직접 매핑 가능. Triton 보다 한 단계 깊은 통합.
cuBLAS / cuDNN 과의 interop
사용자 작성 cuTile 커널이 cuBLAS / cuDNN 의 함수와 같은 추상 위에서 보이고, 같이 fused / scheduled 가능 — 확인 필요.
AMD / 비-NVIDIA 영향 차단
Triton 은 의도적으로 multi-backend (NVIDIA, AMD, Intel). NVIDIA 의 hardware-specific 최적화가 항상 first-class 가 아님.
생태계 own
사용자 표면을 own 하면 — 새 hardware 의 채택, 새 dtype 의 채택, 새 fusion 패턴의 채택 속도를 NVIDIA 가 통제.
Triton 과의 관계

cuTile 이 Triton 을 대체하려는 건 아니다 — 외부 자료에서 일관되게 확인되는 입장. Triton 은 multi-backend / open-source 의 가치, cuTile 은 NVIDIA-specific deep integration. 두 도구가 산업 안에서 같이 사는 방향.

Mehdi Amini 가 NVIDIA 에 합류하면서 들고 온 자산은 — MLIR 의 깊은 이해. cuTile 은 MLIR-first 디자인이 강조된다 — 즉, 컴파일러 인프라의 한 dialect 으로 시작해서 사용자 표면이 따라온다. Triton 도 결국 MLIR-based 가 됐지만, cuTile 은 그 사상이 더 명시적.

“tile abstraction 자체는 보편적이다 — 그러나 그 abstraction 이 어느 컴파일러 stack 위에서 도는가가 산업의 결정.”강의 재구성
§ 03tile-based 추상· tile · index · loop

tile 이 1급 객체인 프로그래밍 모델

tile-based 추상이 무엇인지 — Triton 과 cuTile 이 공유하는 사상의 핵심을 한 번 정리. 그 위에서 cuTile 의 차이가 보인다.

FIG · tile abstraction 의 의미한 텐서를 tile 의 grid 로
0
1
0
1
0
1
0
1
2
3
2
3
2
3
2
3
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
큰 텐서 (8×4) 가 tile (2×2) 의 grid 로 나뉨. 각 색이 한 program/tile 인스턴스. 사용자는 한 tile 의 일을 짠다 — “여러 tile” 의 분배는 컴파일러/하드웨어.
tile
한 program instance 가 다루는 데이터의 한 chunk. 보통 shape 가 (BLOCK_M, BLOCK_N) 같은 고정 모양.
program_id
한 program/tile 의 식별자. program_id(0) = 0번째 axis 에서의 위치. Triton 의 tl.program_id 와 같은 의미.
tile loop
한 tile 안에서 inner loop. K dim 의 reduction 같은 자리. 컴파일러가 자동 unroll / pipeline.
tile primitives
tile 단위 op — load, store, mma, sum, max. element 단위가 아닌 tile 단위.
layout 의 추상
사용자는 보통 layout 을 직접 안 만짐. 컴파일러가 결정. CuTe DSL 과의 큰 차이.
elasticity
같은 코드가 다른 tile size, 다른 hardware 에서 자동으로 다른 launch shape. tile-based 추상의 본질.

이 모델이 왜 자연스러운가 — GPU 의 SIMT 와 systolic 의 본질이 모두 “같은 일을 여러 element 에 동시에” 다. tile 이 그 단위를 사용자 표현 차원에서 끌어올린 것.

§ 04Triton 과의 차이· where cuTile diverges

같은 사상, 다른 디자인 결정

Triton
  • OpenAI 의 open-source 프로젝트
  • multi-backend (NVIDIA, AMD, Intel, ...)
  • TritonGPU dialect (자체 MLIR layer)
  • 사용자 표면이 안정적 (~5년)
  • 새 NVIDIA 명령은 분기 (외부 contributor 의존)
  • 가장 큰 사용자 base
cuTile
  • NVIDIA 의 자체 프로젝트
  • NVIDIA-first / NVIDIA-specific 최적화
  • NVVM / PTX 와 deep integration
  • 사용자 표면이 새것 (개선 중)
  • 새 NVIDIA 명령 first-class
  • CuTe / cuBLAS interop 이 본질
Helion
  • PyTorch Labs (Meta) 의 프로젝트
  • NVIDIA-only (현재)
  • Triton 위의 layer (Triton 으로 lowering)
  • PyTorch-native 가 핵심
  • autotune 자동화 강조
  • 가장 추상적 사용자 표면

같은 영역의 세 도구. 쟁점 — 사용자가 어디에 묶일 것인가. 산업의 답이 보통 “하나로 통합” 이 아니라 “여러 도구가 같이 산다” 의 형태로 끝나는 게 일반적. 각 도구의 sweet spot 이 다르다.

cuTile 의 sweet spot
NVIDIA-only production stack. 새 hardware 명령의 빠른 채택. cuBLAS / cuDNN 와의 deep integration.
Triton 의 sweet spot
portable 한 ML 커널. 산업 표준 DSL. multi-vendor 지원이 필요한 자리.
Helion 의 sweet spot
PyTorch native 한 자리. autotune 의 비용을 컴파일러로 옮기고 싶을 때.
CuTe DSL 의 sweet spot
layout 을 직접 깎아야 하는 자리. tensor core 의 mma 명령에 정확히 맞추는 영역.
CUTLASS C++ 의 자리
이 모든 위의 production 라이브러리. 새 hardware 의 첫 노출, NVIDIA 의 reference.
사용자가 잡아야 할 것
한 도구가 하나의 답이 아니다. 자기 워크로드의 특성 (portable 한가, NVIDIA-only 인가, layout 통제가 필요한가) 에 따라 선택.
§ 05컴파일 파이프라인· Python → MLIR → PTX

cuTile 의 lowering — MLIR-first 디자인

FIG · cuTile lowering 파이프라인대략적 형태 · 확인 필요
L0 cuTile Pythontile primitives · @cuTile.kernel 사용자 표면
L1 cuTile dialect (MLIR)tile-level ops 가 1급 중간 표현
L2 tile → CTA / warp loweringtile 을 thread-block / warp 에 매핑 scheduling
L3 NVGPU dialectNVIDIA-specific 명령 추상 (TMA, mma, async copy) arch awareness
L4 NVVM / LLVM IRNVIDIA 의 standard 컴파일 IR general compiler
L5 PTX → SASSPTX assembler · SASS 생성 실제 명령
각 layer 가 표준 MLIR dialect 의 형태. cuTile dialect → NVGPU dialect → NVVM 의 분리가 핵심 — 각 layer 가 독립적 lowering pass 로 다뤄지고, 다른 dialect (linalg, affine) 와도 자연스럽게 합쳐질 수 있다.

이 디자인의 가치는 — MLIR 의 일반적 가치와 같다. 각 lowering pass 가 독립적으로 작성, 검증, 재사용 가능. 같은 NVGPU dialect 가 cuTile 뿐 아니라 다른 사용자 표면 (linalg, OpenXLA) 에서도 lower 의 target 으로 쓰일 수 있다.

Triton 과의 컴파일러 차이

Triton 도 MLIR 위에서 도는 중 (TritonGPU dialect). 그러나 Triton 의 사용자 표면 → TritonGPU 의 lowering 이 한 step 인 데 비해, cuTile 은 cuTile dialect → NVGPU dialect → NVVM 의 더 명시적 분리. 이게 새 NVIDIA 명령을 빠르게 노출하는 데 유리.

§ 06예시· vector add · GEMM

cuTile 코드의 모양 — 두 가지 표본

실제 API 는 NVIDIA 의 공식 release 가 답. 아래는 외부 자료 + 도메인 지식 기반의 개념적 형태. 강의에서 발표자가 라이브로 보여줬을 가능성이 높은 두 예시.

# 예시 1 — vector add (개념적)
import nvidia.cutile as cutile

@cutile.kernel
def vec_add(x: cutile.Tensor, y: cutile.Tensor,
            out: cutile.Tensor, n: int):
    pid    = cutile.program_id(0)
    offs   = pid * BLOCK + cutile.arange(0, BLOCK)
    mask   = offs < n
    a      = cutile.load(x + offs, mask=mask)
    b      = cutile.load(y + offs, mask=mask)
    cutile.store(out + offs, a + b, mask=mask)

# launch — 사용자 측에서 grid 만 깐다
vec_add[(N // BLOCK,)](x, y, out, N)
# 예시 2 — GEMM (개념적)
@cutile.kernel
def gemm(A, B, C, M, N, K):
    pid_m  = cutile.program_id(0)
    pid_n  = cutile.program_id(1)

    offs_m = pid_m * BM + cutile.arange(0, BM)
    offs_n = pid_n * BN + cutile.arange(0, BN)

    acc    = cutile.zeros((BM, BN), dtype=cutile.float32)

    for k in range(0, K, BK):
        offs_k = k + cutile.arange(0, BK)
        a = cutile.load(A[offs_m, offs_k])    # tile-level slicing
        b = cutile.load(B[offs_k, offs_n])
        acc += cutile.mma(a, b)               # NVIDIA-specific mma 명령

    cutile.store(C[offs_m, offs_n], acc.to(C.dtype))

표면에서는 — 거의 Triton 코드 같다. 차이는 — (1) cutile.mma 같은 NVIDIA-specific primitive 가 first-class, (2) launch grammar 가 NVIDIA 컴파일러와 deep integration, (3) layout / scheduling 의 hint 가 사용자 표면에서 더 정밀하게 노출 가능 — 같은 자리.

“같은 GEMM 코드를 짜더라도, 그 코드가 도착하는 PTX 명령에 차이가 난다 — 그게 NVIDIA-specific 도구의 가치.”학습 노트 · 재구성
§ 07NVIDIA stack 안 위치· CuTe · cuBLAS · TRT

NVIDIA 의 도구 영역 안에서 cuTile 의 자리

cuBLAS / cuDNNvendor library production-grade 표준 GEMM / conv. NVIDIA 의 reference. cuTile 사용자가 “이 op 는 cuBLAS 부르자” 와 매끄러운 interop.
cuTiletile-based DSL · this lecture 사용자 표면 — Python tile primitives. Triton-like 사상 + NVIDIA-specific 통합. fused 패턴 / 새 dtype / 새 명령의 빠른 채택.
CuTe DSLlayout-first DSL · L086 layout 을 직접 깎는 자리. cuTile 보다 한 단계 아래의 추상. Tensor Core 의 정확한 통제.
CUTLASS C++production library NVIDIA 의 reference GEMM library. 새 hardware 명령의 첫 구현체. 위의 모든 도구의 정확성/성능 baseline.
CUDA C++raw 가장 낮은 자리. 직접 PTX 까지. CUTLASS 도 결국 이 위.

이 그림에서 cuTile 은 — “사용자 표면” 의 자리에서 새 entrant. 같은 자리에 Triton, Helion 이 있다. NVIDIA 의 입장은 — 자기 hardware 위에서 가장 잘 도는 사용자 표면을 own 한다는 것. Triton / Helion 과 경쟁이 아니라 “NVIDIA-first 사용자에게는 cuTile, cross-vendor 한 사용자에게는 Triton” 의 분담.

PyTorch / JAX 와의 관계

cuTile 은 PyTorch 에 자연스럽게 통합 가능 — 사용자가 cuTile 커널을 짜고 PyTorch op 으로 register. JAX 의 Pallas 같은 다른 tile-DSL 과도 같은 자리. 확인 필요 — 정확한 통합 방식은 release 이후.

§ 08채택· where it teaches

현재 시점 cuTile 의 자리

발표 시점 (2025) 기준 cuTile 의 release 상태는 — 확인 필요. NVIDIA 내부 도구로 시작해 점차 public release 가 표준 패턴. 사용자 base 형성에 시간이 걸린다.

“새 도구의 가치는 1년 안에는 거의 안 보인다. 3년 안에 산업이 어떻게 도구를 받아쓰는지가 진짜 답.”학습 노트 · 재구성
§ 09다음 단계· roadmap

cuTile 이 풀어야 할 다음 문제들

  1. public release 와 ecosystem 형성 — repo, 문서, 예시, 튜토리얼. Triton 이 5 년 걸린 길.
  2. PyTorch 통합 — torch.compile / Inductor 와의 backend 관계. Helion 같은 layer 가 cuTile 을 backend 로 쓸 가능성.
  3. autotune — Triton 의 @triton.autotune 같은 자동 튜닝 인프라. Helion 의 search space 와 어떻게 합쳐질지.
  4. CuTe DSL 과의 정확한 분담 — 두 도구가 NVIDIA 안에서 같이 산다. 어디서 cuTile, 어디서 CuTe 의 정확한 가이드.
  5. 비-NVIDIA backend매우 확인 필요. NVIDIA-first 디자인이지만, MLIR 위에 있어 기술적으로는 가능. 정책의 문제.
  6. 새 hardware 적응 — Rubin / 그 다음 세대의 명령을 가장 먼저 노출하는 게 cuTile 의 전략적 가치.
§ 10기억할 메모· key takeaways

다시 열었을 때 5분 안에 손에 잡혀야 할 것

cuTile 의 위치
NVIDIA 의 자체 tile-based GPU programming DSL. Triton-like 사용자 표면 + NVIDIA 컴파일러 stack 깊은 통합.
tile abstraction
큰 텐서를 tile 의 grid 로. 사용자는 한 tile 의 일을 짠다. 분배는 컴파일러.
MLIR-first 디자인
cuTile dialect → NVGPU dialect → NVVM → PTX. 각 layer 의 분리가 명시적.
Triton 과의 차이
Triton 은 multi-backend / open. cuTile 은 NVIDIA-first / deep integration. 새 hardware 명령의 빠른 노출.
stack 안 위치
cuBLAS — cuTile — CuTe — CUTLASS — CUDA. 사용자 표면의 한 자리.
Mehdi Amini · Jared Roesch
MLIR + TVM 의 background. NVIDIA 가 컴파일러 stack 위에서 사용자 표면을 own 한다는 신호.
PyTorch 통합
torch.compile / Inductor / Helion 과의 관계는 발표 시점 기준 미확정. 자연스러운 다음.
생태계 시간
새 도구의 채택은 보통 3 년 단위. 1 년 안에는 NVIDIA 내부 + 큰 partner 가 사용자.
Slides official repo 에 미공개
Related MLIR · Triton · CUTLASS · NVIDIA Developer Blog (cuTile 공지) — 확인 필요

손에 새기기 — 학습 시퀀스

  1. cuTile 공식 release 추적 — NVIDIA Developer Blog, GTC 발표, github.com/NVIDIA 의 새 repo 모니터링.
  2. 같은 vector add 세 도구로 비교 — 같은 vector add 를 Triton, Helion, cuTile 로 짜고 PTX 까지 dump. 어떤 명령이 다른지 추적.
  3. 같은 GEMM 비교 — 위와 같은 비교 실험을 GEMM 으로. 작은 / 큰 GEMM 모두에 대해 측정.
  4. MLIR dialect 펼치기 — cuTile 의 lowering pass 를 한 번 dump 해서 본다. 같은 source 가 어떤 IR 을 거쳐 PTX 가 되는지.
  5. 의사결정 사다리 — 자기 워크로드에 대해 “이 hot path 는 어떤 도구가 답인가” 의 결정 framework 작성. portable 인가, NVIDIA-only 인가, layout 통제 필요한가, autotune 자동 원하는가.
§ 11다른 강의로 이어지는 길· connections

cuTile 의 자리에 등장하는 다른 강의들

§ 12열린 질문· open questions

다음에 다시 들었을 때 직접 검증해야 할 것들

검증 메모

이 노트는 자막 실패 + slide / repo 부재 + cuTile 자체가 새 도구라는 상태에서 — Mehdi Amini / Jared Roesch 의 background, NVIDIA 의 GTC 발표, MLIR / Triton 진영의 일반 지식으로 재구성. § 06 의 코드 예시는 정확한 API 가 아니라 개념적 형태. § 07 의 stack 위치, § 09 의 roadmap 도 외부 자료 기반의 추정. 정확한 답은 NVIDIA 의 공식 release 이후.

← Lecture 088 TinyTPU Lecture 090 → 다음 강의로