Jour 9 — Kokkos sur GPU
2 juillet 2026 — dernier jour · Matin : Paul Zehner, Juan-José Silva Cuevas & Thomas Padioleau (Maison de la Simulation, CEA) — Kokkos on GPU · 17 h : Vincent Lafage — A story about cubic root optimisation in C++ and Fortran · puis la présentation de clôture. Le TP reprend le dépôt du Jour 4 (
day-4/exercises/), côtégpu→gpu_async→gpu_async_more.
Session du matin — Kokkos atteint l'accélérateur
1. Une source, tous les backends
Le noyau Kokkos du Jour 4 atterrit sur le GPU : le backend est choisi à la compilation — OpenMP pour les cœurs CPU, CUDA (NVIDIA), HIP (AMD), SYCL (Intel). Le même Gray-Scott tourne sur une station, sur un nœud Jean-Zay (GPU Volta), ou demain sur un accélérateur AMD.
2. La portabilité n'est pas gratuite
La leçon honnête du jour. Le Kokkos « CPU » du Jour 4 portait un avertissement explicite dans le code : il ne tourne que sur CPU, il n'est pas encore portable. Atteindre le GPU a exigé deux ajustements :
Kokkos::LayoutRightsur lesViewetIterate::Rightdans la politique, pour que des threads voisins lisent des adresses voisines — la coalescence mémoire du Jour 6. Un layout qui l'ignore effondre la bande passante GPU.- La gestion explicite hôte↔device.
Kokkos garantit qu'un seul code compile et tourne partout, pas qu'il soit rapide partout.
3. Faire voyager les données
auto u_h = Kokkos::create_mirror_view(u); // tampon hôte associé à la View device
Kokkos::deep_copy(u_h, u); // device → hôte, seulement au besoin
Kokkos::fence("wait for compute"); // les noyaux sont asynchrones
Minimiser ces transferts, c'est le « couper les allers-retours » du Jour 2, transposé au bus PCIe.
4. Recouvrir : gpu → gpu_async → gpu_async_more
| Variante | Idée |
|---|---|
gpu | de base : calcul sur device, copies synchrones |
gpu_async | écriture asynchrone — l'I/O recouvre le calcul suivant |
gpu_async_more | synchronisation et écriture asynchrones — transferts masqués au maximum |
Fin d'après-midi (17 h) & clôture
La racine cubique — le dernier mot
L'exposé final optimise une racine cubique en C++ et en Fortran — rebouclant sur le Jour 3, et nouant la semaine : le compilateur, le langage, la mesure, et ne jamais se fier à l'intuition avant d'avoir chronométré.
L'arc de l'optimisation — la clôture
Des fondations CPU (Jour 1) au noyau GPU portable (aujourd'hui), l'école a tracé un seul arc : le
même Gray-Scott, rendu plus rapide étape par étape — vectorisation, multicœur, Fortran, do concurrent, Python, et enfin Kokkos — à résultat numérique constant. La leçon n'est ni un langage
ni une API : c'est une méthode. Mesurer, trouver le facteur limitant, exploiter le matériel.
En vidéo — le replay officiel
Sources & matériel officiel
- Les slides du jour (PDF, wiki GitLab de l'école) : kokkos_gpu.pdf · la racine cubique — Reprises IJC/PSA vectorisation
- Le dépôt du cours (exercices gpu/gpu_async/gpu_async_more + cours LaTeX) : github.com/Maison-de-la-Simulation/gray-scott-kokkos
- Kokkos : kokkos.org · github.com/kokkos/kokkos
- Replays vidéo (YouTube) : Gray Scott Thursdays
- Site de l'école : GrayScott2026
Jour 8 — Fortran sur GPU
1er juillet, avec Vincent Lafage : le Fortran standard sur GPU via do concurrent, comparé à OpenACC et OpenMP target — mesuré en local sur GTX 1650 — puis la session polyglotte Julia · Rust · C++ · pixi de Pierre Aubert.
Projets
Les projets réalisés par les apprenants de la Gray Scott School, appliquant à des problèmes réels les techniques HPC apprises à la CINERI.