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 :
- Privilégier les bindings haut niveau (ex :
vulkano
) qui automatisent les aspects piégeux1. - 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…