- HipKittens est un ensemble de primitives de programmation conçu pour exploiter les performances potentielles des GPU AMD, en optimisant l’accès mémoire, l’ordonnancement et la réutilisation du cache
- Le GPU AMD MI355X adopte une architecture avec 256 compute units et 8 chiplets (XCD), et offre un grand fichier de registres ainsi que des instructions de cœur matriciel fines
- Contrairement à NVIDIA, AMD ne dispose pas de réattribution de registres, d’instructions matricielles asynchrones ni de
mbarrier, ce qui rend l’ordonnancement 8-wave ping-pong et 4-wave interleave plus efficace que la wave specialization
- HipKittens améliore la localité des caches L2 et LLC grâce à un ordonnancement de grille conscient des chiplets, et obtient des gains de bande passante et de TFLOPS sur les calculs GEMM et Attention
- Cette approche compense le manque de maturité logicielle de l’écosystème GPU AMD et fournit une base pour accroître l’évolutivité du calcul IA sur des matériels variés
Architecture et caractéristiques de performance des GPU AMD CDNA
- Le GPU AMD MI355X comprend 256 compute units (CU), chaque CU étant composée de 4 SIMD
- Un SIMD exécute une wave composée de 64 threads, à comparer au warp NVIDIA de 32 threads
- Le MI355X dispose d’environ 70 % de la SRAM d’un B200 (165 KB) et ne prend pas en charge les fonctions instructions de multiplication matricielle asynchrones, réattribution de registres, accélération de la mémoire tensorielle,
mbarrier
- En revanche, il offre un fichier de registres deux fois plus grand et 60 % de processeurs en plus (256 CU contre 160 SM)
- Il prend en charge des instructions de cœur matriciel petites et fines, ainsi qu’un chargement direct mémoire globale → mémoire partagée (similaire à TMA)
- AMD adopte une architecture en chiplets composée de 8 chiplets (XCD), chaque XCD disposant de son propre cache L2, avec au-dessus un cache LLC
- D’après le tableau, le MI355X atteint 2,5 PFLOPs en BF16, 5,0 PFLOPs en MXFP8, 10,1 PFLOPs en MXFP6, avec 288 Go de mémoire et 8 To/s de bande passante
Défis de conception de kernels pour AMD
- Optimisation des accès mémoire : à cause des contraintes du compilateur HIPCC et d’un comportement d’E/S non public, la conception de la disposition des données et des motifs de swizzle est essentielle
- Ordonnancement à l’intérieur du processeur : sur AMD, il faut exploiter le fichier de registres et les petites instructions matricielles plutôt que la mémoire partagée
- Ordonnancement entre processeurs : du fait de la structure en chiplets, il faut répartir les tâches en tenant compte des effets NUMA au niveau du cache
Motifs d’accès mémoire de HipKittens
- HipKittens (HK) utilise le tile comme unité de base des données et fournit des fonctions d’opération proches de PyTorch
- Un tile est défini par le type de données, la taille et le layout, avec prise en charge de différentes entrées via la métaprogrammation par templates C++
- Ordonnancement des registres : comme HIPCC ne peut pas utiliser certains registres comme entrées MFMA, HK fournit une fonction explicite de fixation des registres
- Le développeur peut attribuer lui-même les registres pour écrire des kernels atteignant les performances maximales
- Disposition des registres : sur AMD, le layout varie selon le type de données et la forme de la matrice, ce qui empêche l’usage d’un motif de swizzle unique
- Par exemple, un tile bf16 16×16 et un tile bf16 16×32 nécessitent des motifs de swizzle différents
- Structure en phases des instructions : les instructions de mémoire partagée d’AMD possèdent des groupes de phases discontinus et sont peu documentées en interne
- HK fournit pour cela un solveur obtenu par rétro-ingénierie
- Génération d’adresses : AMD prend en charge le chargement asynchrone HBM → mémoire partagée et effectue des optimisations via le swizzle d’adresses HBM
Ordonnancement intra-processeur : motifs Wave
- La wave specialization est efficace chez NVIDIA, mais sur AMD elle dégrade les performances à cause de l’absence de réattribution des registres
- Les waves productrices occupent des registres inutiles, tandis que les waves consommatrices subissent des spills faute de registres suffisants
- D’après les expériences de HK, la wave specialization entraîne sur AMD une baisse de l’intensité arithmétique et un goulot d’étranglement mémoire
- Exemple : sur GEMM, la configuration HK 0/8 atteint 1605 TFLOPs, contre 1570 TFLOPs pour CUTLASS
- Motifs d’ordonnancement alternatifs
- 8-wave ping-pong : deux waves exécutent en alternance des clusters mémoire/calcul
- 4-wave interleave : une wave alterne finement mémoire et calcul
- Le 8-wave produit un code plus concis, tandis que le 4-wave est plus fin mais plus long
- Sur GEMM et Attention Forward, le 8-wave atteint des performances au niveau de l’état de l’art
Ordonnancement inter-processeur : approche consciente des chiplets
- L’AMD MI355X possède 8 chiplets XCD, chacun avec un cache L2 indépendant
- Les blocs de threads sont attribués aux chiplets en round-robin, de sorte que l’ordre de la grille influence directement l’efficacité de réutilisation du cache
- Une disposition simple en row-major réduit le taux de réutilisation du cache L2 et provoque une perte de bande passante
- Exemple : L2 55 %, LLC 95 %, 15,1 To/s, 1113 TFLOPs
- HK introduit un ordonnancement de grille conscient des chiplets afin d’exploiter simultanément la localité des caches L2 et LLC
- Les blocs de threads sont regroupés par zones adjacentes de la matrice de sortie afin de maximiser la réutilisation des données d’entrée
Exemples de kernels réels
- Les hot loops des kernels Attention Forward et BF16 GEMM utilisent le planning 8-wave ping-pong de HK
- Chaque boucle exécute alternativement des clusters calcul–mémoire et se synchronise au moyen de barrières d’ordonnancement
- Dans les exemples de code, des opérations HK comme
mma_AtB, load, exp2, col_sum sont utilisées de manière répétée
Conclusion : AMD à l’ère de l’IA multi-silicium
- HipKittens atteint des performances compétitives sur AMD CDNA3 et CDNA4
- Trois éléments clés : accès mémoire optimisé, ordonnancement wave centré sur AMD et ordonnancement de grille conscient des chiplets
- Les kernels HK atteignent les meilleures performances côté AMD et se montrent compétitifs face aux kernels NVIDIA Blackwell
- Pour la diversité du calcul IA, il est nécessaire d’élargir l’accessibilité aux GPU AMD, et HipKittens fournit pour cela une base logicielle essentielle
- L’amélioration de l’ordonnancement des registres dans HIPCC est désignée comme un axe de progrès important pour la suite
1 commentaires
Commentaires sur Hacker News