[{"data":1,"prerenderedAt":706},["ShallowReactive",2],{"navigation_docs_fr":3,"-fr-gray-scott-school-jour-4":66,"-fr-gray-scott-school-jour-4-surround":701},[4,50,60],{"title":5,"path":6,"stem":7,"children":8},"L'École Gray Scott","/fr/gray-scott-school","fr/1.gray-scott-school/01.index",[9,10,14,18,22,26,30,34,38,42,46],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Présentation CINERI","/fr/gray-scott-school/presentation-cineri","fr/1.gray-scott-school/02.presentation-cineri",{"title":15,"path":16,"stem":17},"Jour 1 — Fondations","/fr/gray-scott-school/jour-1","fr/1.gray-scott-school/03.jour-1",{"title":19,"path":20,"stem":21},"Jour 2 — C++ sur CPU","/fr/gray-scott-school/jour-2","fr/1.gray-scott-school/04.jour-2",{"title":23,"path":24,"stem":25},"Jour 3 — Fortran sur CPU","/fr/gray-scott-school/jour-3","fr/1.gray-scott-school/05.jour-3",{"title":27,"path":28,"stem":29},"Jour 4 — Kokkos sur CPU","/fr/gray-scott-school/jour-4","fr/1.gray-scott-school/06.jour-4",{"title":31,"path":32,"stem":33},"Jour 5 — Python sur CPU","/fr/gray-scott-school/jour-5","fr/1.gray-scott-school/07.jour-5",{"title":35,"path":36,"stem":37},"Jour 6 — SIMD avec EVE + architecture GPU","/fr/gray-scott-school/jour-6","fr/1.gray-scott-school/08.jour-6",{"title":39,"path":40,"stem":41},"Jour 7 — Python sur GPU","/fr/gray-scott-school/jour-7","fr/1.gray-scott-school/09.jour-7",{"title":43,"path":44,"stem":45},"Jour 8 — Fortran sur GPU","/fr/gray-scott-school/jour-8","fr/1.gray-scott-school/10.jour-8",{"title":47,"path":48,"stem":49},"Jour 9 — Kokkos sur GPU","/fr/gray-scott-school/jour-9","fr/1.gray-scott-school/11.jour-9",{"title":51,"path":52,"stem":53,"children":54},"Projets","/fr/projets","fr/2.projets/1.index",[55,56],{"title":51,"path":52,"stem":53},{"title":57,"path":58,"stem":59},"SenLand","/fr/projets/senland","fr/2.projets/2.senland",{"title":61,"path":62,"stem":63,"children":64},"À propos","/fr/a-propos","fr/3.a-propos/1.index",[65],{"title":61,"path":62,"stem":63},{"id":67,"title":27,"badge":68,"body":69,"category":68,"description":690,"extension":691,"links":692,"meta":697,"navigation":555,"path":28,"seo":699,"stem":29,"tags":68,"__hash__":700},"docs_fr/fr/1.gray-scott-school/06.jour-4.md",null,{"type":70,"value":71,"toc":669},"minimark",[72,116,121,126,145,216,220,223,234,255,259,267,274,277,289,300,307,348,358,362,385,428,432,455,459,480,487,494,573,580,584,590,594,665],[73,74,75],"blockquote",{},[76,77,78,82,83,86,87,90,91,94,95,99,100,103,104,107,108,111,112,115],"p",{},[79,80,81],"strong",{},"25 juin 2026"," · Intervenants : ",[79,84,85],{},"Paul Zehner",", ",[79,88,89],{},"Juan-José Silva Cuevas"," &\n",[79,92,93],{},"Thomas Padioleau"," (Maison de la Simulation, CEA) · Auditorium Marcel Vivargent + sites\nsatellites (dont la CINERI). Le TP du jour vit dans ",[96,97,98],"code",{},"GrayScott2026/day-4/exercises/"," —\n",[79,101,102],{},"CPU uniquement"," : les exercices ",[96,105,106],{},"gpu*"," attendront le Jour 9. Bonus rare : ",[79,109,110],{},"le cours\nlui-même est dans le dépôt"," (",[96,113,114],{},"courses/kokkos_cpu.tex",", thème beamer Gray-Scott).",[117,118,120],"h2",{"id":119},"session-du-matin-du-séquentiel-au-premier-noyau","Session du matin — du séquentiel au premier noyau",[122,123,125],"h3",{"id":124},"_1-pourquoi-kokkos","1. Pourquoi Kokkos",[76,127,128,129,132,133,136,137,140,141,144],{},"Le cours ouvre sur les promesses — et elles sont précises. Kokkos vise les ",[79,130,131],{},"3P"," :\n",[79,134,135],{},"Performance"," (le meilleur d'un matériel donné), ",[79,138,139],{},"Portabilité"," (le même code sur des\nmatériels différents), ",[79,142,143],{},"Productivité"," (écrire, maintenir, étendre vite) — et y ajoute la\nmaturité (production, pas un produit de recherche), la communauté, la longévité et\nl'interopérabilité (I/O, algèbre linéaire, ML).",[146,147,148,164],"table",{},[149,150,151],"thead",{},[152,153,154,158,161],"tr",{},[155,156,157],"th",{},"Approche",[155,159,160],{},"Tourne sur",[155,162,163],{},"Vous écrivez",[165,166,167,179,190,203],"tbody",{},[152,168,169,173,176],{},[170,171,172],"td",{},"CUDA / HIP bruts",[170,174,175],{},"le GPU d'un seul vendeur",[170,177,178],{},"des kernels bas niveau",[152,180,181,184,187],{},[170,182,183],{},"OpenMP / OpenACC",[170,185,186],{},"CPU (+ certains GPU)",[170,188,189],{},"des directives sur les boucles",[152,191,192,197,200],{},[170,193,194],{},[96,195,196],{},"std::execution::par",[170,198,199],{},"dépend du compilateur",[170,201,202],{},"des algorithmes standard",[152,204,205,210,213],{},[170,206,207],{},[79,208,209],{},"Kokkos",[170,211,212],{},"CPU + GPU NVIDIA / AMD / Intel",[170,214,215],{},"des patrons C++ + Views",[122,217,219],{"id":218},"_2-la-thèse-un-code-des-backends","2. La thèse : un code, des backends",[221,222],"d4-backends",{},[122,224,226,227,230,231],{"id":225},"_3-le-tp-démarre-hello_world-sequential","3. Le TP démarre : ",[96,228,229],{},"hello_world"," → ",[96,232,233],{},"sequential",[76,235,236,237,239,240,243,244,246,247,250,251,254],{},"La progression du dépôt est pensée pour isoler chaque idée. ",[96,238,229],{}," vérifie\nl'installation (init/finalize via ",[96,241,242],{},"Kokkos::ScopeGuard",") ; ",[96,245,233],{}," pose le ",[79,248,249],{},"Gray-Scott\nséquentiel de référence"," — l'étalon contre lequel toutes les variantes seront comparées.\nL'infrastructure partagée vit dans ",[96,252,253],{},"common/"," (paramètres CLI11, écriture des sorties,\nhelpers).",[117,256,258],{"id":257},"session-de-laprès-midi-views-parallélisme-simd","Session de l'après-midi — Views, parallélisme, SIMD",[122,260,262,263,266],{"id":261},"_4-view-le-conteneur-qui-abstrait-la-mémoire","4. ",[96,264,265],{},"View"," — le conteneur qui abstrait la mémoire",[76,268,269,270,273],{},"Pourquoi un conteneur abstrait ? Le cours répond : plus d'allocation manuelle, une sémantique\nmémoire ",[79,271,272],{},"unifiée CPU/GPU",", l'allocation vendeur cachée, des capacités avancées (layout\nabstrait, sous-tableaux, multidimensionnel) et de la sûreté (vérifications compile/runtime).",[275,276],"d4-view",{},[76,278,279,280,284,285,288],{},"La boucle est bouclée avec les Jours 2-3 : le ",[281,282,283],"em",{},"layout"," était le plus gros levier — Kokkos en\nfait un ",[79,286,287],{},"paramètre de type",", réglé par défaut sur ce qui va au matériel.",[122,290,292,293,296,297],{"id":291},"_5-parallel_for-et-parallel_reduce","5. ",[96,294,295],{},"parallel_for"," et ",[96,298,299],{},"parallel_reduce",[76,301,302,303,306],{},"Le noyau devient une ",[79,304,305],{},"lambda"," passée à un patron parallèle, avec une politique d'itération :",[308,309,314],"pre",{"className":310,"code":311,"language":312,"meta":313,"style":313},"language-cpp shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Kokkos::parallel_for(\"compute\",\n  Kokkos::MDRangePolicy\u003CKokkos::Rank\u003C2>>({1, 1}, {rows - 1, cols - 1}),\n  KOKKOS_LAMBDA (int i, int j) {\n    u_temp(i, j) = u(i, j) + dt * (/* … le stencil … */);\n  });\n","cpp","",[96,315,316,324,330,336,342],{"__ignoreMap":313},[317,318,321],"span",{"class":319,"line":320},"line",1,[317,322,323],{},"Kokkos::parallel_for(\"compute\",\n",[317,325,327],{"class":319,"line":326},2,[317,328,329],{},"  Kokkos::MDRangePolicy\u003CKokkos::Rank\u003C2>>({1, 1}, {rows - 1, cols - 1}),\n",[317,331,333],{"class":319,"line":332},3,[317,334,335],{},"  KOKKOS_LAMBDA (int i, int j) {\n",[317,337,339],{"class":319,"line":338},4,[317,340,341],{},"    u_temp(i, j) = u(i, j) + dt * (/* … le stencil … */);\n",[317,343,345],{"class":319,"line":344},5,[317,346,347],{},"  });\n",[76,349,350,351,354,355,357],{},"La ",[79,352,353],{},"réduction"," (somme de contrôle du champ) suit le même patron avec ",[96,356,299],{}," — la\nversion parallèle et sûre de l'accumulation.",[122,359,361],{"id":360},"_6-basculer-sur-le-backend-cpu","6. Basculer sur le backend CPU",[76,363,364,365,368,369,372,373,376,377,380,381,384],{},"L'exercice ",[96,366,367],{},"cpu"," active OpenMP (",[96,370,371],{},"-DKokkos_ENABLE_OPENMP=ON",") : mêmes Views, mêmes lambdas,\ntous les cœurs. Honnêteté du dépôt : le fichier porte un ",[79,374,375],{},"avertissement explicite"," — cette\nversion « ne tourne que sur CPU, ce n'est pas encore du Kokkos portable ». Ce qui manque pour\nle GPU (layouts, transferts, ",[96,378,379],{},"fence",") est ",[79,382,383],{},"exactement le programme du Jour 9",".",[146,386,387,397],{},[149,388,389],{},[152,390,391,394],{},[155,392,393],{},"Backend",[155,395,396],{},"Flag",[165,398,399,409,418],{},[152,400,401,404],{},[170,402,403],{},"Serial",[170,405,406],{},[96,407,408],{},"-DKokkos_ENABLE_SERIAL=ON",[152,410,411,414],{},[170,412,413],{},"OpenMP",[170,415,416],{},[96,417,371],{},[152,419,420,423],{},[170,421,422],{},"Threads",[170,424,425],{},[96,426,427],{},"-DKokkos_ENABLE_THREADS=ON",[122,429,431],{"id":430},"_7-simd-la-vectorisation-explicite-version-kokkos","7. SIMD — la vectorisation explicite, version Kokkos",[76,433,364,434,437,438,443,444,447,448,451,452,384],{},[96,435,436],{},"cpu_simd"," descend d'un cran : les types\n",[79,439,440],{},[96,441,442],{},"Kokkos::Experimental::simd"," empaquettent ",[96,445,446],{},"simd_width = SimdType::size()"," valeurs par\nopération, chargées depuis les Views (",[96,449,450],{},"simd_flag_default","). C'est le même parallélisme\nintra-cœur qu'au Jour 1 — et l'avant-goût direct d'",[79,453,454],{},"EVE au Jour 6",[122,456,458],{"id":457},"_8-vérifier-toujours","8. Vérifier, toujours",[76,460,461,464,465,468,469,472,473,476,477,384],{},[96,462,463],{},"scripts/check_outcome.sh"," rejoue chaque implémentation sur le cas ",[79,466,467],{},"10 × 10"," et compare les\n",[79,470,471],{},"checksums"," ; ",[96,474,475],{},"scripts/run_all.sh"," lance toutes les variantes d'un build. La règle du Jour 1\n(équivalence séquentiel/parallèle) est ici ",[79,478,479],{},"outillée",[117,481,483,484],{"id":482},"le-tp-grayscott2026day-4","Le TP — ",[96,485,486],{},"GrayScott2026/day-4/",[76,488,489,490,493],{},"Dépendances : CMake ≥ 3.28, ",[79,491,492],{},"Kokkos ≥ 5.1.1",", HDF5 (C++), CLI11. Deux voies :",[308,495,499],{"className":496,"code":497,"language":498,"meta":313,"style":313},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# 1) dépendances gérées par CMake (sauf HDF5)\ncmake -B build -DCMAKE_BUILD_TYPE=Release -DENABLE_DOWNLOAD_FALLBACK=ON -DHDF5_ROOT=…\ncmake --build build --parallel $(nproc)\n\n# 2) vérifier une implémentation\nbash exercises/scripts/check_outcome.sh build/cpu/gray_scott_cpu\n","bash",[96,500,501,507,529,551,557,562],{"__ignoreMap":313},[317,502,503],{"class":319,"line":320},[317,504,506],{"class":505},"sHwdD","# 1) dépendances gérées par CMake (sauf HDF5)\n",[317,508,509,513,517,520,523,526],{"class":319,"line":326},[317,510,512],{"class":511},"sBMFI","cmake",[317,514,516],{"class":515},"sfazB"," -B",[317,518,519],{"class":515}," build",[317,521,522],{"class":515}," -DCMAKE_BUILD_TYPE=Release",[317,524,525],{"class":515}," -DENABLE_DOWNLOAD_FALLBACK=ON",[317,527,528],{"class":515}," -DHDF5_ROOT=…\n",[317,530,531,533,536,538,541,545,548],{"class":319,"line":332},[317,532,512],{"class":511},[317,534,535],{"class":515}," --build",[317,537,519],{"class":515},[317,539,540],{"class":515}," --parallel",[317,542,544],{"class":543},"sMK4o"," $(",[317,546,547],{"class":511},"nproc",[317,549,550],{"class":543},")\n",[317,552,553],{"class":319,"line":338},[317,554,556],{"emptyLinePlaceholder":555},true,"\n",[317,558,559],{"class":319,"line":344},[317,560,561],{"class":505},"# 2) vérifier une implémentation\n",[317,563,565,567,570],{"class":319,"line":564},6,[317,566,498],{"class":511},[317,568,569],{"class":515}," exercises/scripts/check_outcome.sh",[317,571,572],{"class":515}," build/cpu/gray_scott_cpu\n",[76,574,575,576,579],{},"Des ",[79,577,578],{},"images Docker"," officielles (CPU : interactive, jupyter, vscode, code_server) sont\nlistées dans le README du dépôt.",[117,581,583],{"id":582},"en-vidéo-le-replay-officiel","En vidéo — le replay officiel",[585,586],"yt-embed",{"caption":587,"id":588,"title":589},"Replay — Kokkos On CPU and GPU (Gray Scott Thursdays)","oeA0W10CHHg","Kokkos On CPU and GPU",[117,591,593],{"id":592},"sources-matériel-officiel","Sources & matériel officiel",[595,596,597,619,630,645,655],"ul",{},[598,599,600,603,604,607,608,611,612],"li",{},[79,601,602],{},"Le dépôt du cours"," (exercices + ",[79,605,606],{},"le cours LaTeX"," dans ",[96,609,610],{},"courses/",") :\n",[613,614,618],"a",{"href":615,"rel":616},"https://github.com/Maison-de-la-Simulation/gray-scott-kokkos",[617],"nofollow","github.com/Maison-de-la-Simulation/gray-scott-kokkos",[598,620,621,624,625],{},[79,622,623],{},"Les slides du jour"," (PDF, wiki GitLab de l'école) :\n",[613,626,629],{"href":627,"rel":628},"https://gitlab.in2p3.fr/CTA-LAPP/COURS/GRAY_SCOTT_REVOLUTIONS/GrayScott2026/-/wikis/uploads/GrayScottDay-4/kokkos_cpu.pdf",[617],"kokkos_cpu.pdf",[598,631,632,132,634,639,640],{},[79,633,209],{},[613,635,638],{"href":636,"rel":637},"https://kokkos.org/",[617],"kokkos.org"," ·\n",[613,641,644],{"href":642,"rel":643},"https://github.com/kokkos/kokkos",[617],"github.com/kokkos/kokkos",[598,646,647,132,650],{},[79,648,649],{},"Replays vidéo (YouTube)",[613,651,654],{"href":652,"rel":653},"https://www.youtube.com/playlist?list=PLiZttWgOMudb6PsUoWtxY3G4Gv8f2lurG",[617],"Gray Scott Thursdays",[598,656,657,132,660],{},[79,658,659],{},"Site de l'école",[613,661,664],{"href":662,"rel":663},"https://cta-lapp.pages.in2p3.fr/COURS/GRAY_SCOTT_REVOLUTIONS/GrayScott2026/index.html",[617],"GrayScott2026",[666,667,668],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}",{"title":313,"searchDepth":326,"depth":326,"links":670},[671,677,686,688,689],{"id":119,"depth":326,"text":120,"children":672},[673,674,675],{"id":124,"depth":332,"text":125},{"id":218,"depth":332,"text":219},{"id":225,"depth":332,"text":676},"3. Le TP démarre : hello_world → sequential",{"id":257,"depth":326,"text":258,"children":678},[679,681,683,684,685],{"id":261,"depth":332,"text":680},"4. View — le conteneur qui abstrait la mémoire",{"id":291,"depth":332,"text":682},"5. parallel_for et parallel_reduce",{"id":360,"depth":332,"text":361},{"id":430,"depth":332,"text":431},{"id":457,"depth":332,"text":458},{"id":482,"depth":326,"text":687},"Le TP — GrayScott2026/day-4/",{"id":582,"depth":326,"text":583},{"id":592,"depth":326,"text":593},"25 juin, avec Paul Zehner, Juan-José Silva Cuevas et Thomas Padioleau : Kokkos sur CPU — une seule source C++, des backends choisis à la compilation, Views, parallel_for et SIMD.","md",[693],{"label":694,"icon":695,"to":615,"target":696},"Dépôt du cours","i-simple-icons-github","_blank",{"icon":698},"lucide:layers",{"title":27,"description":690},"0zxjxB2Wydh3Cz7JP70UWwpbJ5mC6-N1DshruD8a0eQ",[702,704],{"title":23,"path":24,"stem":25,"description":703,"children":-1},"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.",{"title":31,"path":32,"stem":33,"description":705,"children":-1},"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.",1783172491115]