ROCm est une pile logicielle développée par Advanced Micro Devices (AMD) pour la programmation d'unités de traitement graphique (GPU). Elle couvre plusieurs domaines, notamment le calcul généraliste sur unités de traitement graphique (GPGPU), le calcul haute performance (HPC) et le calcul hétérogène. ROCm offre plusieurs modèles de programmation, dont HIP (programmation basée sur les noyaux GPU), OpenMP (programmation par directives) et OpenCL. La pile est un logiciel libre et open-source, à l'exception des blobs de firmware GPU, et est distribuée sous diverses licences. Le nom signifiait initialement Radeon Open Compute platform, mais comme Open Compute est une marque déposée, il ne fonctionne plus comme un acronyme.
ROCm est conçu pour fournir une plateforme unifiée permettant aux développeurs d'exploiter les GPU AMD pour des tâches intensives en calcul, des simulations scientifiques aux charges de travail de Machine learning. Il comprend une gamme de composants, allant des pilotes de noyau de bas niveau aux bibliothèques et outils de haut niveau, permettant une exécution efficace sur divers matériels. La pile est activement développée par AMD et la communauté open-source, avec un support pour les GPU professionnels et grand public.
Contexte
La première pile logicielle GPGPU d'ATI/AMD était Close to Metal, devenue plus tard Stream. ROCm a été lancé vers 2016 avec l'Initiative Boltzmann, s'appuyant sur les piles GPU précédentes d'AMD. Certains outils remontent à GPUOpen, tandis que d'autres proviennent de l'architecture de systèmes hétérogènes (HSA). En juillet 2026, AMD a annoncé que ROCm adopterait un cycle de publication de six semaines, visant des mises à jour et améliorations plus fréquentes.
Langage intermédiaire de l'architecture de systèmes hétérogènes
HSAIL a été conçu pour produire une représentation intermédiaire de niveau moyen, indépendante du matériel, qui pourrait être compilée à la volée (JIT) vers le matériel final (GPU, FPGA, etc.) à l'aide du finaliseur approprié. Cette approche a été abandonnée pour ROCm, qui compile désormais uniquement du code GPU en utilisant LLVM et son backend AMDGPU qui a été intégré en amont. Cependant, la recherche se poursuit sur une modularité améliorée avec LLVM MLIR.
Capacités de programmation
ROCm en tant que pile s'étend du pilote noyau aux applications utilisateur final. AMD fournit des vidéos d'introduction sur le matériel AMD GCN et la programmation ROCm via son portail d'apprentissage. L'une des meilleures introductions techniques à la pile et à la programmation ROCm/HIP reste, à ce jour, disponible sur Reddit.
Support matériel
ROCm est principalement destiné aux GPU professionnels discrets, mais les GPU grand public et les APU de la même architecture qu'un GPU professionnel pris en charge sont connus pour fonctionner avec ROCm. Par exemple, tous les GPU professionnels de l'architecture RDNA 2 sont officiellement pris en charge par ROCm 5.x ; les utilisateurs rapportent que les unités RDNA2 grand public telles que l'APU Radeon 6800M et la carte graphique Radeon 6700XT fonctionnent également.
GPU de qualité professionnelle
ROCm prend officiellement en charge une gamme de GPU professionnels, y compris ceux basés sur les architectures CDNA et RDNA. Ceux-ci sont généralement utilisés dans les centres de données et les stations de travail pour les charges de travail HPC et Artificial intelligence. Le support est continuellement étendu avec chaque version.
GPU grand public
Bien que non officiellement garantis, de nombreux GPU grand public issus des mêmes familles d'architectures que les modèles professionnels pris en charge fonctionnent avec ROCm. La communauté a documenté une utilisation réussie des GPU Radeon grand public pour des tâches de calcul, bien que les performances et la stabilité puissent varier.
Écosystème logiciel
Apprentissage automatique
Divers frameworks d'Deep learning disposent d'un backend ROCm, permettant l'accélération GPU sur le matériel AMD. Les frameworks notables incluent PyTorch, TensorFlow, ONNX, MXNet, CuPy, MIOpen, Caffe, Iree (qui utilise LLVM MLIR) et llama.cpp. Ces intégrations permettent aux développeurs d'exécuter l'entraînement et l'inférence de réseaux de neurones sur les GPU AMD, prenant en charge des modèles comme les grands modèles de langage et les architectures transformers.
Supercalcul
ROCm gagne une traction significative dans le top 500 des supercalculateurs. Il est utilisé avec les supercalculateurs exascale El Capitan et Frontier. Le logiciel associé est disponible sur AMD Infinity Hub, qui fournit des applications conteneurisées pour la recherche scientifique.
Autre accélération et interopération graphique
Depuis la version 3.0, Blender peut utiliser les noyaux de calcul HIP pour son moteur de rendu Cycles, permettant un rendu accéléré par GPU sur le matériel AMD.
Autres langages
#### Julia
Julia dispose du paquet AMDGPU.jl, qui s'intègre avec LLVM et sélectionne des composants de la pile ROCm. Au lieu de compiler le code via HIP, AMDGPU.jl utilise le compilateur de Julia pour générer directement du LLVM IR, qui est ensuite consommé par LLVM pour générer du code natif pour le dispositif. AMDGPU.jl utilise l'implémentation HSA de ROCm pour télécharger le code natif sur le dispositif et l'exécuter, de manière similaire à la façon dont HIP charge son propre code de dispositif généré. AMDGPU.jl prend également en charge l'intégration avec rocBLAS (pour BLAS), rocRAND (pour la génération de nombres aléatoires) et rocFFT (pour les FFT) de ROCm. Une intégration future avec rocALUTION, rocSOLVER, MIOpen et d'autres bibliothèques ROCm est prévue.
Distribution logicielle
Officielle
Les instructions d'installation sont fournies pour Linux et Windows dans la documentation officielle de ROCm. Le logiciel ROCm est actuellement réparti sur plusieurs dépôts GitHub publics. Dans le principal méta-dépôt public, un manifeste est fourni pour chaque version officielle ; l'utilisation de git-repo, un outil de contrôle de version basé sur Git, est la méthode recommandée pour synchroniser localement la pile. AMD distribue également des applications conteneurisées pour ROCm, notamment des applications de recherche scientifique regroupées sous AMD Infinity Hub, ainsi que des paquets adaptés à diverses distributions Linux.
Tiers
Il existe un écosystème croissant de distributions Linux qui empaquettent officiellement ROCm, avec divers degrés d'avancement, notamment Arch Linux, Debian, Fedora, GNU Guix et NixOS. Des paquets Spack sont également disponibles pour les environnements HPC.
Composants
Il existe un composant dans l'espace noyau, ROCk, et le reste - environ une centaine de composants dans la pile - sont dans l'espace utilisateur. La politique typographique non officielle est d'utiliser la majuscule ROC pour les composants de bas niveau (par exemple, ROCt) et la minuscule pour les bibliothèques orientées utilisateur (par exemple, rocBLAS). AMD développe activement avec la communauté LLVM, mais l'intégration en amont n'est pas instantanée, et en janvier 2022, elle est encore en retard. AMD continue de packager officiellement diverses fourches LLVM pour les fonctionnalités non encore intégrées en amont, y compris les optimisations de compilateur, le déchargement OpenMP, et plus encore.
Pilote de noyau ROCk
Le pilote de noyau ROCk gère le matériel GPU et fournit l'interface pour les bibliothèques d'espace utilisateur.
Bibliothèques de périphériques ROCm
Les bibliothèques de support sont implémentées en tant que bitcode LLVM. Elles fournissent des fonctions pour les opérations mathématiques, les opérations atomiques, les lancements de noyaux, et plus encore.
ROCt - Runtime
Le runtime ROCt est un ensemble d'API et de bibliothèques qui permet aux applications hôtes de lancer des noyaux GPU. Il est l'implémentation d'AMD de la spécification HSA.
ROCm Common Language Runtime
Le langage commun d'exécution est responsable de l'acheminement des appels vers ROCr sur Linux et PAL sur Windows, et absorbe progressivement les couches d'indirection supérieures.
OpenCL
ROCm fournit son chargeur de pilote installable client et une implémentation OpenCL regroupés ensemble. OpenCL est une API ouverte pour la programmation parallèle hétérogène.
HIP - Interface de programmation hétérogène
HIP est une interface de programmation d'applications (API) conçue pour permettre le portage de code entre les GPU AMD et NVIDIA. HIP est souvent comparé à CUDA, car il fournit une couche d'abstraction similaire, permettant aux développeurs d'écrire du code exécutable sur les deux plateformes.
Composants
Il existe un composant en espace noyau, ROCk, et le reste - environ une centaine de composants dans la pile - sont des modules en espace utilisateur. La politique typographique non officielle consiste à utiliser des minuscules pour les bibliothèques de bas niveau (par exemple, rocBLAS) et des caractères mixtes pour les bibliothèques orientées utilisateur (par exemple, ROCm). AMD développe activement avec la communauté LLVM, mais l'intégration en amont n'est pas instantanée, et en janvier 2022, elle accuse un certain retard. AMD package toujours officiellement divers forks de LLVM pour les parties non encore intégrées en amont, notamment les optimisations de compilateur propriétaires, le support de débogage, le déchargement OpenMP, et plus encore.
Niveau bas
#### ROCk - Pilote noyau
ROCk est le composant central de l'espace noyau qui gère le matériel GPU et fournit l'interface pour les bibliothèques de l'espace utilisateur.
#### ROCm - Bibliothèques de support
Ces bibliothèques sont implémentées en bitcode LLVM et fournissent des fonctions pour les opérations mathématiques, les atomiques, les lancements de noyaux, et plus encore.
#### ROCt - Thunk
Le thunk est responsable de toutes les interactions de bas niveau avec le pilote, gérant les communications entre l'espace utilisateur et le noyau.
#### ROCr - Runtime
Le runtime ROC est l'implémentation de l'API HSA par AMD, permettant le lancement de noyaux de calcul par les applications.
#### CompilerSupport
Cette couche gère l'interaction avec LLVM et la génération de code de dispositif.
Niveau intermédiaire
#### HIP - Hétérogène Interface de Programmation
HIP est une API C++ conçue pour être portable entre les GPU AMD et NVIDIA, avec des outils de conversion de code CUDA.
#### OpenCL
ROCm fournit une implémentation d'OpenCL, bien que la version soit en retard par rapport aux dernières spécifications.
Niveau haut
#### Bibliothèques de calcul
Des bibliothèques optimisées comme rocBLAS, rocFFT, rocRAND, et MIOpen sont fournies pour des opérations courantes en calcul scientifique et en apprentissage automatique.