Analyse et perspectives

Ce caractère bas niveau a des avantages et inconvénients :

  • Avantage : On a la main sur plus de choses, on peut optimiser davantage.
  • Inconvénient : On doit jongler avec beaucoup de concepts, dur pour le débutant !

Pour le code hôte, on peut simplifier énormément les choses en combinant deux approches :

  1. Privilégier les bindings haut niveau (ex : vulkano) qui automatisent les aspects piégeux1.
  2. Construire un squelette réutilisable, notamment pour l’initialisation.

Pour le code GPU (“kernels”), se pose aujourd’hui la question du langage.

  • Historiquement, on était forcé d’utiliser un DSL dédié (GLSL, WGSL…)
    • Très rapide à apprendre, plutôt ergonomique pour des choses simples.
    • Mais pas de partage de code (notam. définitions types/fns) possible avec l’hôte !
  • Aujourd’hui, on a l’alternative émergente rust-gpu
    • Les shaders sont en Rust → Partage de code avec l’hôte facile.
    • Mais encore très jeune : pas d’opérations atomiques, de subgroups

Pour l’instant, je recommande les DSLs plus matures. Mais rust-gpu est clairement la clé qui permettra l’arrivée d’APIs GPGPU plus haut niveau en Rust. Cf prototype krnl.

1

Ex : temps de vie des ressources, interfaces shaders/hôte, synchronisation…