HipScript - Pour exécuter du code CUDA dans votre navigateur
Vous rêviez de faire tourner vos algorithmes CUDA directement dans votre navigateur ou encore de tester vos scripts de calcul exploitant le GPU de votre PC sans galérer avec une installation complexe ? Alors accrochez-vous à vos slips Freegun, car HipScript va transformer votre Chrome en véritable station de calcul haute performance !
Car jusqu’à présent, pour exploiter la puissance des cartes graphiques NVIDIA avec CUDA ou AMD avec HIP, il fallait installer tout un tas de SDK, drivers et autres joyeusetés qui donnaient des cheveux blancs aux administrateurs système et à votre serviteur également. Mais grâce à HipScript, cette époque est révolue, terminée, clôturée, tchao bye bye !
Pour faire simple, CUDA c’est l’API développée par NVIDIA pour le calcul GPGPU (calcul général sur GPU) et dans un code CUDA, on retrouve une base C++ commune au CPU et au GPU, ce qui permet de partager facilement les mêmes structures et les mêmes fonctions. Les kernels, eux, sont conçus pour être lancés par milliers (voire millions) de threads, organisés en « blocs » et en « grilles ». AMD n’a pas tardé à répliquer, créant HIP : un concurrent quasi jumeau de CUDA, reprenant son vocabulaire et sa syntaxe afin de bénéficier de l’écosystème déjà existant, même si à titre personnel, je trouve ça quand même vachement moins bien que que CUDA.
Grâce à HipScript, tout ce petit monde (CUDA ou HIP) peut maintenant être exécuté directement dans le navigateur ! Le projet exploite à la fois WebAssembly et WebGPU pour éliminer la fastidieuse installation de pilotes ou de SDK. Si votre navigateur supporte WebGPU (par exemple Chrome, avec quelques flags activés), vous voilà donc armé pour tester et exécuter vos codes en un simple clic.
Pour les bidouilleurs qui ont réussi à lire cet article jusque ici, voici quelques idées d’utilisation possibles :
- Minage de cryptomonnaies légères : Pour tester vos algorithmes de mining directement dans le navigateur, hein… Et pas vous enrichir sur le dos des visiteurs de votre site.
- Rendu 3D temps réel : Pour créer des visualisations impressionnantes pour vos projets
- Machine Learning : Pour expérimenter avec des réseaux de neurones sans installer PyTorch (parce que c’est relou à installer surtout).
- Stéganographie & Chiffrement : Pour cacher des données dans des images avec des algorithmes GPU optimisés ou faire du chiffrement bien costaud.
- Cracking de hash : Ou pour au contraire la robustesse de vos mots de passe (légalement bien sûr !)
- Compression vidéo : Pour encoder vos vidéos avec des algorithmes personnalisés
La magie HipScript opère grâce à une chaîne de compilation intelligente. Tout d’abord, votre code CUDA/HIP est converti en OpenCL via le compilateur chipStar. Ensuite, ce code OpenCL est transformé en SPIR-V/Vulkan avec clspv. Puis Tint convertit le shader Vulkan en shader WebGPU (WGSL) et pour terminer, le tout est encapsulé dans du WebAssembly pour s’exécuter dans le navigateur. C’est ti pas beau ça quand même ?
Voici un petit exemple de kernel CUDA qui s’exécute directement dans le navigateur :
cuda __global__ void addVectors(float* a, float* b, float* c, int n) { int i = blockIdx.x * blockDim.x + threadIdx.x; if (i < n) { c[i] = a[i] + b[i]; } }
Maintenant rendez-vous sur la démo en ligne pour tester ce code et d’autres exemples plus avancés ! D’ailleurs, la prise en charge des fonctionnalités de CUDA/HIP évolue constamment. Pour le moment, HipScript gère déjà la syntaxe basique de lancement de kernels, la mémoire partagée (statique et dynamique), __syncthreads
, ou encore printf
pour déboguer (même si certaines limitations existent sur les pointeurs ou les types de nombres, comme le 64-bit floating point).
Et HipScript n’est pas encore parfait puisque seul un sous-ensemble des fonctionnalités CUDA/HIP est supporté pour le moment. Les performances ne sont pas encore au niveau du natif. Et il faut un navigateur récent avec WebGPU activé.
Malgré tout, il y a de quoi s’amuser ! Côté optimisation, l’équipe a fait preuve d’ingéniosité pour réduire la taille de l’outil et gérer la compilation LLVM en WebAssembly : compression via Brotli pour alléger les téléchargements, intégration à Wasmer et à Cloudflare R2 pour déployer et exécuter le binaire efficacement, même si quelques bugs restent à résoudre. Mais peu importe, le résultat est déjà bluffant : compiler et lancer du code CUDA/HIP dans un simple onglet Chrome est un véritable tour de force !
Le code source est disponible sur GitHub pour ceux qui voudraient bidouiller ou contribuer au projet. Et qui sait, peut-être serez-vous le premier à créer une application web révolutionnaire exploitant la puissance brute du GPU directement dans le navigateur ?
Pour plus de détails, rendez-vous sur le blog de lights0123, ainsi que sur l’article de Phoronix.