6 · CUDA Tile¶
En août 2025, NVIDIA a fait quelque chose qu'elle n'avait pas fait depuis 2006 : ajouter un second modèle de programmation à CUDA. Ce chapitre explique ce qu'il est, ce qu'il change, et ce qu'il ne fait pas encore.
6.1 Le constat qui l'a motivé¶
Le modèle SIMT vous fait écrire du code du point de vue d'un thread :
int i = blockIdx.x * blockDim.x + threadIdx.x;
c[i] = a[i] + b[i];
Cela fonctionne remarquablement bien pour des opérations élémentaires. Cela fonctionne mal dès qu'on veut utiliser les tensor cores, parce que ceux-ci opèrent sur des tuiles, avec des dispositions de registres imposées.
Écrire une GEMM performante en SIMT exige donc de :
- décomposer manuellement le problème en tuiles ;
- affecter manuellement des fragments de tuile à chaque thread ;
- respecter des dispositions de registres définies par le PTX ISA ;
- gérer le swizzling, les descripteurs, les barrières asynchrones.
Autrement dit : le programmeur fait un travail que le compilateur pourrait faire, et le refait à chaque génération de matériel.
Triton avait démontré depuis 2021 qu'un modèle de tuiles est viable. CUDA Tile est la réponse de NVIDIA.
6.2 Le modèle¶
Dans le modèle Tile, on décrit des opérations sur des tuiles, et le compilateur décide de la répartition sur les threads.
# cuTile Python — syntaxe indicative
import cuda.tile as ct
@ct.jit
def gemm(A, B, C):
i, j = ct.program_id()
acc = ct.zeros((128, 128), dtype=ct.float32)
for k in range(0, A.shape[1], 64):
a = ct.load(A, (i * 128, k), (128, 64))
b = ct.load(B, (k, j * 128), (64, 128))
acc += ct.dot(a, b)
ct.store(C, (i * 128, j * 128), acc)
Aucun threadIdx. Aucune mémoire partagée explicite. Aucun descripteur.
Le compilateur choisit :
- la taille de bloc ;
- l'allocation de mémoire partagée et le nombre d'étages de pipeline ;
- l'émission des copies TMA ;
- la disposition des données pour
wgmmaoutcgen05; - le swizzling.
Ce n'est pas Triton, mais c'est le même paradigme
La différence principale est l'intégration : CUDA Tile passe par une nouvelle représentation intermédiaire, la CUDA Tile IR, qui est une ISA virtuelle au même titre que PTX. Elle est destinée à devenir une cible de compilation pour d'autres langages, pas seulement pour cuTile Python.
NVIDIA annonce également une implémentation en C++ dans une version ultérieure de CUDA.
6.3 Les trois composants¶
| Composant | Statut (août 2026) | Rôle |
|---|---|---|
| CUDA Tile IR | livrée | ISA virtuelle par tuiles, sous PTX |
| cuTile Python | livré (CUDA 13.1) | DSL Python pour écrire des noyaux par tuiles |
| Tile en C++ | annoncé | même modèle, dans CUDA C++ |
Extensions livrées dans les versions suivantes (13.2 à 13.4) : formats numériques et précision mixte, MMA sur tuiles, vues et sous-vues de tuiles, réductions (y compris atomiques et définies par l'utilisateur), synchronisation et communication au niveau des tuiles.
Le profilage est supporté : Nsight Compute sait profiler les noyaux CUDA Tile depuis CUDA 13.1.
6.4 Le support matériel¶
| Architecture | Compute capability | Supporté |
|---|---|---|
| Ampere | 8.x | oui |
| Ada | 11.x* | oui |
| Hopper | 9.x | (non listé dans l'annonce initiale) |
| Blackwell | 10.x, 12.x | oui |
* La numérotation des compute capabilities a été réorganisée dans CUDA 13 ; se référer à la documentation pour la correspondance exacte de votre carte.
L'absence de Hopper dans la liste initiale est notable
L'annonce de CUDA 13.1 mentionne Ampere, Ada et Blackwell. Hopper — l'architecture la plus déployée en centre de données en 2026 — n'y figure pas explicitement, sans que la raison en soit publique.
Vérifiez le support de votre cible avant de bâtir dessus. La couverture s'élargit à chaque version.
6.5 Ce que ça change, et ce que ça ne change pas¶
Ce que ça change¶
1. La portabilité entre générations. Un noyau écrit en tuiles peut être
recompilé pour Blackwell puis Rubin sans réécriture. C'est l'argument le plus
fort : le code SIMT optimisé pour sm_90a (TMA + wgmma) ne tourne pas sur
Blackwell.
2. Le coût d'entrée. Écrire une GEMM correcte en cuTile prend des heures ;
en CUDA C++ avec TMA et wgmma, des semaines.
3. L'accès aux fonctionnalités récentes. Le compilateur émet TMA,
tcgen05, le swizzling et le pipelining sans que le programmeur ait à les
connaître.
Ce que ça ne change pas¶
1. Le plafond de performance reste celui du compilateur. Comme pour Triton, il y aura toujours des noyaux où l'écriture manuelle gagne. La question est de savoir de combien, et pour quelle proportion de cas.
2. Les problèmes structurels restent. CUDA Tile ne supprime pas les frontières de noyau, ne fait pas de synchronisation inter-blocs, et ne construit pas de megakernel. Il optimise l'intérieur d'un noyau.
3. Il faut toujours comprendre le roofline. Un noyau limité par la mémoire le reste, quel que soit le modèle de programmation.
6.6 Où se situe CUDA Tile dans le paysage¶
Abstraction ↑
│ torch.compile / Inductor
│ Helion
│ Triton · cuTile Python
│ Gluon · CuTe DSL ← contrôle explicite en Python
│ CUTLASS C++ · ThunderKittens
│ CUDA C++ (TMA, wgmma manuels)
│ PTX
↓ SASS
cuTile Python se place au niveau de Triton, avec deux différences :
- il est officiel, donc suivi par NVIDIA génération après génération ;
- il n'est pas portable vers AMD ou Intel, alors que Triton l'est.
C'est le compromis habituel : intégration verticale contre portabilité.
La lecture stratégique
L'existence de CUDA Tile est un aveu implicite : le modèle SIMT ne suffit plus pour exploiter le matériel moderne, et Triton avait raison.
Pour un développeur, la conséquence pratique est rassurante : le modèle de
tuiles que vous apprenez avec Triton est transférable. tl.load,
tl.dot, tl.store et leurs équivalents cuTile décrivent la même chose.
6.7 Les autres nouveautés de CUDA 13.x qui comptent¶
Puisque ce chapitre parle du CUDA le plus récent, voici ce qu'il faut savoir d'autre.
| Nouveauté | Version | Utilité |
|---|---|---|
| Green Contexts (API runtime) | 13.1 | partitionner le GPU au niveau des SM |
| cuBLAS : +2 à 6× sur BF16/FP8/block-scaled Blackwell | 13.1 | gratuit, recompilez |
| Grouped GEMM dans cuBLAS | 13.1 | essentiel pour les MoE |
| CCCL 3.1 : réductions déterministes, CUB en une phase | 13.1 | reproductibilité |
| Compute Sanitizer : détection d'erreurs mémoire à la compilation | 13.1 | débogage |
| Abandon de la compilation hors ligne pré-Turing | 13.0 | vérifiez vos cibles |
| Fin des pilotes Windows fournis avec le toolkit | 13.0 | installation séparée |
Le point grouped GEMM mérite d'être souligné : c'est exactement ce dont un MoE a besoin (une GEMM par expert, avec des tailles différentes), et son absence obligeait jusque-là à passer par des bibliothèques tierces.
Résumé du chapitre¶
À retenir
- CUDA Tile (CUDA 13.1, décembre 2025) est un second modèle de programmation CUDA, à base de tuiles plutôt que de threads.
- Trois composants : la CUDA Tile IR (ISA virtuelle), cuTile Python (livré), et une implémentation C++ annoncée.
- Le compilateur choisit la répartition sur les threads, la mémoire partagée, le pipelining, TMA et les instructions MMA.
- Support : Ampere, Ada, Blackwell. Vérifiez pour Hopper.
- Il optimise l'intérieur d'un noyau : il ne supprime ni les frontières de noyau ni le besoin de comprendre le roofline.
- Son existence confirme que le modèle par tuiles, popularisé par Triton, est devenu le modèle de référence.
Vérifiez que vous avez compris¶
Pourquoi NVIDIA introduit-elle un second modèle plutôt que d'améliorer le compilateur SIMT ?
Parce que l'information manque au compilateur. Dans du code SIMT, la notion
de « tuile » n'existe pas : le compilateur voit des indices calculés à partir
de threadIdx et des accès mémoire individuels. Reconstruire une structure
de tuile à partir de cela est un problème d'analyse très difficile, et
fragile.
Dans le modèle Tile, la structure est déclarée. Le compilateur sait qu'il manipule un bloc 128×64 et peut donc choisir librement la disposition, le swizzle, l'instruction MMA. C'est le même argument que celui de Triton.
cuTile ou Triton pour un nouveau projet en 2026 ?
Cela dépend d'un seul critère : allez-vous cibler autre chose que NVIDIA ?
- Non → cuTile a l'avantage du support officiel, de l'intégration avec Nsight, et du suivi des futures architectures.
- Oui (AMD, Intel, ou incertitude) → Triton, qui a des back-ends AMD et Intel fonctionnels et un écosystème mature (Liger Kernel, FlashInfer, vLLM, une communauté).
À la date de rédaction, Triton reste le choix par défaut pour la plupart des projets, simplement parce qu'il est éprouvé depuis 2021 et que l'écosystème de noyaux qui l'utilisent est immense. cuTile est jeune.
CUDA Tile peut-il générer un megakernel ?
Non, pas dans son état actuel. CUDA Tile optimise la structure interne d'un noyau : découpage en tuiles, pipelining, choix d'instructions.
Un megakernel exige autre chose : une synchronisation inter-blocs à grain fin, un ordonnancement dynamique de tâches hétérogènes, et une gestion de la mémoire partagée comme ressource globale. Ce sont des problèmes de structure entre les opérations, pas dans une opération.
C'est précisément le vide que comblent Mirage MPK, Event Tensor et les autres compilateurs de la partie 8 — dont les auteurs notent explicitement que « PyTorch, Triton et TVM ne supportent pas nativement la génération de megakernels de bout en bout ».
Partie suivante : Écosystème
Sources de ce chapitre¶
- NVIDIA CUDA 13.1 Powers Next-Gen GPU Programming with NVIDIA CUDA Tile
- What's New and Important in CUDA Toolkit 13.0
- CUDA Toolkit 13.4 Developer Preview Release Notes
- CUDA Toolkit 13.3 Release Notes
- Mirage Persistent Kernel, arXiv:2512.22219 — sur l'absence de support megakernel dans les cadres existants.