- Compilateur open source autonome qui convertit directement le code source CUDA C (.cu) en code machine pour AMD RDNA3 (GFX11)
- Génère des binaires ELF
.hsaco via son propre analyseur lexical, parseur et représentation intermédiaire (BIR), sans LLVM ni couche HIP
- Écrit en environ 15 000 lignes de code C99 et peut être compilé avec une unique commande
make
- Prend en charge les principales fonctionnalités de CUDA, notamment les variables intégrées de thread, la mémoire partagée, les opérations atomiques, les opérations de warp et les groupes coopératifs
- Publié sous licence Apache 2.0, avec pour objectif d'étendre à l'avenir la prise en charge à Tenstorrent, Intel Arc, RISC-V et d'autres architectures
Présentation de BarraCUDA
- BarraCUDA est un compilateur CUDA pour GPU AMD qui convertit les fichiers
.cu en code machine GFX11
- Le résultat est un binaire ELF
.hsaco exécutable sur les GPU AMD
- Il fonctionne de manière totalement autonome, sans dépendance à LLVM
- L'ensemble du code représente environ 15 000 lignes écrites en C99 et peut être compilé avec un unique Makefile
- Le projet est développé à titre personnel par un développeur basé en Nouvelle-Zélande
Fonctionnement
- Le fichier
.cu en entrée est traité selon la chaîne prétraitement → analyse lexicale → parsing → analyse sémantique → génération de BIR → sélection d'instructions → allocation de registres → encodage binaire → sortie ELF
- BIR (BarraCUDA IR) est une représentation interne sous forme SSA, conçue pour être indépendante de l'architecture
- Tous les encodages ont été vérifiés via
llvm-objdump, avec zéro erreur de décodage
Fonctionnalités prises en charge
- Syntaxe de base de CUDA :
__global__, __device__, __host__, threadIdx, blockIdx, etc.
- Fonctionnalités CUDA : mémoire
__shared__, __syncthreads(), opérations atomiques, shuffle/vote de warp, types vectoriels, précision half, groupes coopératifs, etc.
- Fonctionnalités du compilateur : préprocesseur C complet, récupération après erreur, suivi des positions dans le code source, prise en charge du passage de structures par valeur
Éléments non pris en charge
- L'utilisation de
unsigned seul, les opérateurs d'affectation composés (+=, -=, etc.), const, la mémoire __constant__, les tableaux partagés 2D, les textures et surfaces, ainsi que l'exécution parallèle dynamique ne sont pas encore implémentés
- Les unités de traduction multiples et la génération de code hôte ne sont pas prises en charge
Tests et feuille de route
- Validation effectuée sur 14 fichiers de test, plus de 35 kernels et environ 27 Ko de code machine
- Objectif à court terme : compléter la syntaxe et renforcer la compatibilité avec des fichiers
.cu réels
- Objectif à moyen terme : optimisations comme l'ordonnancement des instructions, l'amélioration de l'allocation de registres, le constant folding et le déplacement de code invariant de boucle
- Objectif à long terme : ajout de nouveaux backends comme Tenstorrent, Intel Arc, RISC-V Vector Extension
Licence
1 commentaires
Commentaires sur Hacker News
L’humour néo-zélandais dans le README du projet a marqué les esprits
Le fait d’implémenter son propre encodage d’instructions sans dépendre de LLVM est rafraîchissant
Cela montre à quel point il faut une énorme maîtrise du bas niveau pour lancer un projet comme celui-ci
Dans l’écosystème AMD, l’absence de prise en charge de CUDA sert souvent d’argument pour justifier le monopole de NVIDIA, donc ce genre d’initiative pourrait aider à rééquilibrer le marché
lexer.c)Surprise de voir que le premier ticket externe a été ouvert par geohot (lien vers l’issue)
Certains aimeraient voir ce type de profils unir leurs forces pour briser le monopole de NVIDIA sur le marché des GPU
Faire tourner des charges d’inférence IA sur des GPU NVIDIA coûte très cher
Des projets comme celui-ci sont importants pour permettre aux startups de construire des alternatives abordables
Certains se demandent quelles sont les performances sur des opérations comme
conv2dou l’attention« # It’s C99. It builds with gcc. There are no dependencies. »
Cette simplicité, où un simple
makesuffit, est vraiment magnifiqueEn voyant les majuscules dans le titre du post, quelqu’un a enfin compris pourquoi la ferme de GPU de son entreprise s’appelle « barracuda ». Ça l’a bien fait rire
Si des développeurs passionnés réussissaient là où AMD n’a pas réussi, ce serait drôle et triste à la fois
Prendre en charge CUDA reviendrait à renforcer davantage l’écosystème de NVIDIA
Si l’objectif est un substitut à CUDA, ZLUDA pourrait être plus pratique
Mais il est regrettable que, lorsqu’un projet grossit, il finisse souvent racheté par un grand groupe puis disparaisse
Comme le montrent Linus et git, avec de la volonté et des connaissances, on peut faire tomber des barrières
Le fait de ne pas officiellement prendre en charge FSR4 sur les anciennes cartes en serait un exemple
Certains se demandent si le support pourrait aller jusqu’aux anciennes architectures AMD (GFX1010, etc.)
Il ajuste l’encodage binaire en lisant la documentation ISA
Mais c’est un domaine où les LLM ne sont pas très bons, donc il faut comprendre et corriger les choses soi-même
Comme CUDA prend en charge le C++, certains se demandaient si partir sur du pur C sans Clang/LLVM n’était pas trop limitant
En ce moment, l’open source est inondé de PR générées par l’IA, et le fait que ce projet évite ce type de dépendance a été apprécié
AMD devrait, selon certains, soutenir officiellement ce projet
Le monde a besoin d’échapper au monopole de NVIDIA
Certains se sont demandé : « OpenCL, c’est fini maintenant ? »
Ils n’en sont pas sûrs, mais trouvent quand même ce projet impressionnant
Apple le prenait en charge autrefois, mais cela ne semble plus être le cas aujourd’hui
Un peu comme la relation entre Unix et Windows : techniquement c’était bon, mais le marché a basculé d’un seul côté