Jour 4 — Kokkos sur CPU
25 juin 2026 · Intervenants : Paul Zehner, Juan-José Silva Cuevas & Thomas Padioleau (Maison de la Simulation, CEA) · Auditorium Marcel Vivargent + sites satellites (dont la CINERI). Le TP du jour vit dans
GrayScott2026/day-4/exercises/— CPU uniquement : les exercicesgpu*attendront le Jour 9. Bonus rare : le cours lui-même est dans le dépôt (courses/kokkos_cpu.tex, thème beamer Gray-Scott).
Session du matin — du séquentiel au premier noyau
1. Pourquoi Kokkos
Le cours ouvre sur les promesses — et elles sont précises. Kokkos vise les 3P : Performance (le meilleur d'un matériel donné), Portabilité (le même code sur des matériels différents), Productivité (écrire, maintenir, étendre vite) — et y ajoute la maturité (production, pas un produit de recherche), la communauté, la longévité et l'interopérabilité (I/O, algèbre linéaire, ML).
| Approche | Tourne sur | Vous écrivez |
|---|---|---|
| CUDA / HIP bruts | le GPU d'un seul vendeur | des kernels bas niveau |
| OpenMP / OpenACC | CPU (+ certains GPU) | des directives sur les boucles |
std::execution::par | dépend du compilateur | des algorithmes standard |
| Kokkos | CPU + GPU NVIDIA / AMD / Intel | des patrons C++ + Views |
2. La thèse : un code, des backends
3. Le TP démarre : hello_world → sequential
La progression du dépôt est pensée pour isoler chaque idée. hello_world vérifie
l'installation (init/finalize via Kokkos::ScopeGuard) ; sequential pose le Gray-Scott
séquentiel de référence — l'étalon contre lequel toutes les variantes seront comparées.
L'infrastructure partagée vit dans common/ (paramètres CLI11, écriture des sorties,
helpers).
Session de l'après-midi — Views, parallélisme, SIMD
4. View — le conteneur qui abstrait la mémoire
Pourquoi un conteneur abstrait ? Le cours répond : plus d'allocation manuelle, une sémantique mémoire unifiée CPU/GPU, l'allocation vendeur cachée, des capacités avancées (layout abstrait, sous-tableaux, multidimensionnel) et de la sûreté (vérifications compile/runtime).
La boucle est bouclée avec les Jours 2-3 : le layout était le plus gros levier — Kokkos en fait un paramètre de type, réglé par défaut sur ce qui va au matériel.
5. parallel_for et parallel_reduce
Le noyau devient une lambda passée à un patron parallèle, avec une politique d'itération :
Kokkos::parallel_for("compute",
Kokkos::MDRangePolicy<Kokkos::Rank<2>>({1, 1}, {rows - 1, cols - 1}),
KOKKOS_LAMBDA (int i, int j) {
u_temp(i, j) = u(i, j) + dt * (/* … le stencil … */);
});
La réduction (somme de contrôle du champ) suit le même patron avec parallel_reduce — la
version parallèle et sûre de l'accumulation.
6. Basculer sur le backend CPU
L'exercice cpu active OpenMP (-DKokkos_ENABLE_OPENMP=ON) : mêmes Views, mêmes lambdas,
tous les cœurs. Honnêteté du dépôt : le fichier porte un avertissement explicite — cette
version « ne tourne que sur CPU, ce n'est pas encore du Kokkos portable ». Ce qui manque pour
le GPU (layouts, transferts, fence) est exactement le programme du Jour 9.
| Backend | Flag |
|---|---|
| Serial | -DKokkos_ENABLE_SERIAL=ON |
| OpenMP | -DKokkos_ENABLE_OPENMP=ON |
| Threads | -DKokkos_ENABLE_THREADS=ON |
7. SIMD — la vectorisation explicite, version Kokkos
L'exercice cpu_simd descend d'un cran : les types
Kokkos::Experimental::simd empaquettent simd_width = SimdType::size() valeurs par
opération, chargées depuis les Views (simd_flag_default). C'est le même parallélisme
intra-cœur qu'au Jour 1 — et l'avant-goût direct d'EVE au Jour 6.
8. Vérifier, toujours
scripts/check_outcome.sh rejoue chaque implémentation sur le cas 10 × 10 et compare les
checksums ; scripts/run_all.sh lance toutes les variantes d'un build. La règle du Jour 1
(équivalence séquentiel/parallèle) est ici outillée.
Le TP — GrayScott2026/day-4/
Dépendances : CMake ≥ 3.28, Kokkos ≥ 5.1.1, HDF5 (C++), CLI11. Deux voies :
# 1) dépendances gérées par CMake (sauf HDF5)
cmake -B build -DCMAKE_BUILD_TYPE=Release -DENABLE_DOWNLOAD_FALLBACK=ON -DHDF5_ROOT=…
cmake --build build --parallel $(nproc)
# 2) vérifier une implémentation
bash exercises/scripts/check_outcome.sh build/cpu/gray_scott_cpu
Des images Docker officielles (CPU : interactive, jupyter, vscode, code_server) sont listées dans le README du dépôt.
En vidéo — le replay officiel
Sources & matériel officiel
- Le dépôt du cours (exercices + le cours LaTeX dans
courses/) : github.com/Maison-de-la-Simulation/gray-scott-kokkos - Les slides du jour (PDF, wiki GitLab de l'école) : kokkos_cpu.pdf
- Kokkos : kokkos.org · github.com/kokkos/kokkos
- Replays vidéo (YouTube) : Gray Scott Thursdays
- Site de l'école : GrayScott2026
Jour 3 — Fortran sur CPU
24 juin, avec Vincent Lafage : Fortran 2018 sur CPU toute la journée — le langage des tableaux, la précision flottante, l'exercice des flags, et le solveur Gray-Scott en Fortran moderne.
Jour 5 — Python sur CPU
26 juin, avec Alice Faure, Jean-Marc Colley, Sébastien Valat et Nabil Garroum : profiler Python, vectoriser avec NumPy, compiler avec Numba, puis tracer avec JAX — jusqu'à ×18 sans quitter Python.