7 points par GN⁺ 2025-04-28 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • CubeCL est une extension de langage multiplateforme haute performance qui permet d’écrire des noyaux GPU en Rust
  • Prend entièrement en charge les fonctions, génériques et structures, avec une prise en charge partielle des traits, méthodes et de l’inférence de types
  • Prend en charge des runtimes basés sur WGPU, CUDA et ROCm, et un runtime CPU JIT optimisé exploitant les instructions SIMD est également en cours de développement
  • Fournit des fonctionnalités d’auto-vectorisation, d’optimisation à la compilation (Comptime) et d’auto-tuning afin de maximiser les performances du code
  • Utilise une approche originale qui s’appuie sur le système de macros procédurales de Rust pour analyser et étendre le code des noyaux GPU

Présentation de CubeCL

  • CubeCL est une extension du langage Rust pour le calcul haute performance, qui permet d’écrire directement des noyaux GPU
  • S’appuie sur des abstractions à coût nul afin de permettre un développement de noyaux efficace et facile à maintenir
  • Prend actuellement entièrement en charge les fonctions, génériques et structures, tandis que les traits, les méthodes et l’inférence de types ne sont que partiellement pris en charge

Exemple d’utilisation simple

  • Utilise l’attribut #[cube] pour désigner les fonctions à exécuter sur le GPU
  • Les fonctions gelu_array et gelu_scalar utilisent automatiquement les instructions SIMD pour améliorer les performances
  • Il est possible d’exécuter un noyau avec la fonction launch_unchecked

Runtimes pris en charge

  • WGPU : prise en charge GPU multiplateforme via Vulkan, Metal, DirectX et WebGPU
  • CUDA : prise en charge optimisée des GPU NVIDIA
  • ROCm/HIP : prise en charge des GPU AMD (en cours de développement)
  • Runtime CPU JIT : développement en cours d’un runtime CPU JIT optimisé basé sur Cranelift et exploitant les instructions SIMD

Objectifs de CubeCL

  • Permettre d’écrire des noyaux de calcul haute performance sans dépendre d’un matériel spécifique
  • Améliorer la configurabilité, la réutilisabilité, la testabilité et la maintenabilité du code grâce à l’auto-vectorisation, Comptime et l’auto-tuning
  • Fournir une réutilisation optimisée des buffers pour un débit élevé grâce à des stratégies de gestion mémoire
  • Développer des composants d’algèbre linéaire afin de construire un écosystème de calcul scientifique et haute performance

Fonctionnement de CubeCL

  • Utilise une approche originale fondée sur le système de macros procédurales de Rust pour analyser et étendre le code des noyaux GPU
  • Comptime : l’absence de transformation du code source facilite l’intégration des optimisations à la compilation
  • Auto-vectorisation : vectorise les entrées des fonctions CubeCL pour déterminer les éléments de vectorisation de chaque variable intermédiaire
  • Intégration à Rust : le code généré reste du code Rust valide et peut être distribué sous forme de bundle sans dépendance à un runtime spécifique

Design et fonctionnalités particulières

  • CubeCL est conçu autour des cubes, et toutes les API de calcul peuvent être mappées au matériel de façon à utiliser une représentation 3D
  • Auto-vectorisation : permet d’améliorer les performances via les instructions SIMD, et les facteurs de vectorisation sont directement accessibles dans le noyau
  • Comptime : modifie l’IR du compilateur à l’exécution afin d’apporter optimisation et flexibilité
  • Auto-tuning : exécute de petits benchmarks au runtime pour sélectionner le noyau et les paramètres optimaux

Points à noter et historique

  • CubeCL est actuellement en version alpha et comporte encore des aspects non finalisés
  • À l’origine, il a commencé comme backend WebGPU du projet Burn
  • Puis il a été étendu avec l’ajout d’un runtime CUDA, d’un IR générique et d’un frontend Rust
  • Des concepts génériques ont été développés pour surmonter les différences entre CUDA et WebGPU

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.