[{"data":1,"prerenderedAt":840},["ShallowReactive",2],{"navigation_docs_fr":3,"-fr-gray-scott-school-jour-2":66,"-fr-gray-scott-school-jour-2-surround":835},[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":19,"badge":68,"body":69,"category":68,"description":823,"extension":824,"links":825,"meta":830,"navigation":832,"path":20,"seo":833,"stem":21,"tags":68,"__hash__":834},"docs_fr/fr/1.gray-scott-school/04.jour-2.md",null,{"type":70,"value":71,"toc":806},"minimark",[72,108,113,118,133,203,210,214,221,224,231,235,254,257,263,267,281,319,333,337,368,411,414,421,427,431,435,445,448,454,459,463,481,484,507,513,518,537,543,554,656,682,686,693,699,704,708,802],[73,74,75],"blockquote",{},[76,77,78,82,83,86,87,90,91,94,95,98,99,103,104,107],"p",{},[79,80,81],"strong",{},"23 juin 2026"," · Intervenants : ",[79,84,85],{},"Sébastien Valat"," & ",[79,88,89],{},"Pierre Aubert"," (LAPP) · Auditorium\nMarcel Vivargent + sites satellites (dont la CINERI). Deux sessions distinctes : le matin,\n",[79,92,93],{},"C++ 17/20/23 sur CPU"," ; l'après-midi, ",[79,96,97],{},"l'optimisation avancée"," (blocking & Pyramide).\nLe TP du jour vit dans ",[100,101,102],"code",{},"GrayScott2026/day-2/"," — ",[79,105,106],{},"le GPU n'est pas concerné aujourd'hui",".",[109,110,112],"h2",{"id":111},"session-du-matin-c-172023-sur-cpu","Session du matin — C++ 17/20/23 sur CPU",[114,115,117],"h3",{"id":116},"_1-la-règle-dor-mesurer-dabord","1. La règle d'or : mesurer d'abord",[76,119,120,121,124,125,128,129,132],{},"On ne garde aucune optimisation sans chiffre. Le TP commence donc par construire l'outillage\nde mesure lui-même, en trois crans (modules ",[100,122,123],{},"1-FirstPerformanceTest"," → ",[100,126,127],{},"2-BenchmarkFunction"," →\n",[100,130,131],{},"3-FunctionTimer",") :",[134,135,136,152],"table",{},[137,138,139],"thead",{},[140,141,142,146,149],"tr",{},[143,144,145],"th",{},"Module",[143,147,148],{},"Ce qu'on construit",[143,150,151],{},"La leçon",[153,154,155,172,187],"tbody",{},[140,156,157,162,169],{},[158,159,160],"td",{},[100,161,123],{},[158,163,164,165,168],{},"un ",[100,166,167],{},"timer.cpp"," minimal",[158,170,171],{},"mesurer, c'est déjà du code",[140,173,174,178,184],{},[158,175,176],{},[100,177,127],{},[158,179,180,181],{},"répétitions + statistiques + ",[100,182,183],{},"pin_thread_to_core",[158,185,186],{},"une mesure isolée ment ; épingler le thread stabilise",[140,188,189,193,200],{},[158,190,191],{},[100,192,131],{},[158,194,195,196,199],{},"le ",[100,197,198],{},"FunctionTimer"," réutilisable du cours",[158,201,202],{},"l'outil qu'on gardera toute l'école",[76,204,205,206,209],{},"Détail qui compte : ",[100,207,208],{},"pin_thread_to_core.cpp"," — sans épinglage, l'ordonnanceur balade le thread\nde cœur en cœur et le bruit noie l'effet qu'on veut mesurer.",[114,211,213],{"id":212},"_2-le-stencil-et-pourquoi-il-est-memory-bound","2. Le stencil — et pourquoi il est memory-bound",[76,215,216,217,220],{},"Le Laplacien discret de Gray-Scott est un ",[79,218,219],{},"stencil 3×3"," : chaque point de sortie est une somme\npondérée de ses neuf voisins.",[222,223],"d2-stencil",{},[76,225,226,227,230],{},"Une douzaine de flops pour neuf lectures : ",[79,228,229],{},"l'intensité arithmétique est faible",". Sur le\nroofline du Jour 1, ce noyau vit sous le toit incliné — il attend la mémoire, pas le calcul.\nToute la journée découle de ce constat.",[114,232,234],{"id":233},"_3-la-disposition-mémoire-le-plus-gros-levier","3. La disposition mémoire — le plus gros levier",[76,236,237,238,241,242,245,246,249,250,253],{},"Module ",[100,239,240],{},"5-DataLayout"," : le même noyau, avec deux parcours mémoire (",[100,243,244],{},"layout_efficient"," vs\n",[100,247,248],{},"layout_swap_axis","). La mémoire est un ruban 1D ; le cache charge par ",[79,251,252],{},"lignes"," entières.",[255,256],"d2-layout",{},[76,258,259,260],{},"Parcourir le tableau dans l'ordre de stockage nourrit le cache ; inverser les axes le vide à\nchaque accès. ",[79,261,262],{},"Avant toute astuce de calcul, on règle le parcours mémoire.",[114,264,266],{"id":265},"_4-la-vectorisation-une-conversation-avec-le-compilateur","4. La vectorisation — une conversation avec le compilateur",[76,268,237,269,272,273,276,277,280],{},[100,270,271],{},"6-Vectorization"," : on ne vectorise pas à la main aujourd'hui, on ",[79,274,275],{},"laisse le\ncompilateur"," le faire — à condition de lui donner une boucle propre (pure, contiguë, sans\naliasing ; ",[100,278,279],{},"__restrict__"," promet l'absence d'aliasing).",[134,282,283,293],{},[137,284,285],{},[140,286,287,290],{},[143,288,289],{},"Cible",[143,291,292],{},"Flags",[153,294,295,307],{},[140,296,297,302],{},[158,298,299],{},[100,300,301],{},"naive_gray_scott_O3",[158,303,304],{},[100,305,306],{},"-O3",[140,308,309,314],{},[158,310,311],{},[100,312,313],{},"autovec_gray_scott_O3",[158,315,316],{},[100,317,318],{},"-O3 -march=native -mtune=native -ftree-vectorize -funroll-loops",[76,320,321,324,325,328,329,332],{},[100,322,323],{},"-march=native"," autorise le SIMD le plus large du CPU (AVX2 → ×8 floats) ; le module\n",[100,326,327],{},"autovectorization3x3"," spécialise le noyau pour le stencil 3×3. Vérifier ce que le compilateur\na réellement fait : ",[100,330,331],{},"make helpoption"," liste les variantes de compilation du TP.",[114,334,336],{"id":335},"_5-assembler-la-simulation","5. Assembler la simulation",[76,338,339,340,343,344,347,348,351,352,355,356,359,360,363,364,367],{},"Modules ",[100,341,342],{},"9-Simulation"," (le solveur assemblé, du ",[100,345,346],{},"very_naive"," à l'",[100,349,350],{},"autovec","),\n",[100,353,354],{},"10-FullHDSimulation"," (passage à l'échelle 1920×1080), ",[100,357,358],{},"7-DataOutput"," (écriture ",[79,361,362],{},"HDF5",") et\n",[100,365,366],{},"8-ImagePlotting"," (conversion en images) :",[369,370,375],"pre",{"className":371,"code":372,"language":373,"meta":374,"style":374},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","time ./9-Simulation/autovec_gray_scott_O3 -n 10 -e 30 -r 1080 -c 1920\nmkdir pics && time ./8-ImagePlotting/gray_scott_image -i output.h5 -o pics/\n","bash","",[100,376,377,390],{"__ignoreMap":374},[378,379,382,386],"span",{"class":380,"line":381},"line",1,[378,383,385],{"class":384},"sbssI","time",[378,387,389],{"class":388},"sTEyZ"," ./9-Simulation/autovec_gray_scott_O3 -n 10 -e 30 -r 1080 -c 1920\n",[378,391,393,397,401,405,408],{"class":380,"line":392},2,[378,394,396],{"class":395},"sBMFI","mkdir",[378,398,400],{"class":399},"sfazB"," pics",[378,402,404],{"class":403},"sMK4o"," &&",[378,406,407],{"class":384}," time",[378,409,410],{"class":388}," ./8-ImagePlotting/gray_scott_image -i output.h5 -o pics/\n",[76,412,413],{},"Les motifs de Turing apparaissent — la récompense visuelle de la journée :",[76,415,416],{},[417,418],"img",{"alt":419,"src":420},"Sortie de la simulation Gray-Scott (frame du cours)","/school/day-2/gray-scott-frame.png",[76,422,423],{},[424,425,426],"em",{},"Frame produite par la simulation du cours — figure du support officiel, © Pierre Aubert (LAPP).",[109,428,430],{"id":429},"session-de-laprès-midi-optimisation-avancée-blocking-pyramide","Session de l'après-midi — Optimisation avancée : blocking & Pyramide",[114,432,434],{"id":433},"_6-le-blocking-pavage-du-cache","6. Le blocking (pavage du cache)",[76,436,237,437,440,441,444],{},[100,438,439],{},"14-Blocking",". Sur une grille Full HD, balayer des lignes entières déborde le cache :\nchaque valeur est évincée avant d'être réutilisée. Le blocking découpe le domaine en ",[79,442,443],{},"tuiles","\ndimensionnées pour un niveau de cache, et termine chaque tuile avant de passer à la suivante.",[446,447],"d2-blocking",{},[76,449,450],{},[417,451],{"alt":452,"src":453},"Décomposition officielle du domaine en blocs avec halos (cours PerformanceWithStencil)","/school/day-2/block-decomposition.png",[76,455,456],{},[424,457,458],{},"La décomposition en blocs du cours : quatre familles de blocs, chacun avec son halo de lecture —\nfigure du support officiel, © Pierre Aubert (LAPP).",[114,460,462],{"id":461},"_7-la-pyramide-pavage-espace-temps","7. La Pyramide — pavage espace-temps",[76,464,237,465,468,469,472,473,476,477,480],{},[100,466,467],{},"15-AdvancedBlocking",", le sommet de la journée. Le blocking pave l'espace ; la\n",[79,470,471],{},"Pyramide"," pave l'espace ",[79,474,475],{},"et le temps"," : la tuile chargée en cache encaisse plusieurs pas\nde temps d'affilée (le halo rétrécit d'une cellule par pas — d'où la forme pyramidale), et\nl'",[79,478,479],{},"anti-pyramide"," comble les creux entre pyramides.",[482,483],"d2-pyramid",{},[76,485,486,487,490,491,494,495,498,499,502,503,506],{},"Dans le TP, c'est une vraie petite bibliothèque (",[100,488,489],{},"151-PyramidLib",") : ",[100,492,493],{},"PyramidIterator",",\n",[100,496,497],{},"PyramidIdx",", ",[100,500,501],{},"AntiPyramidIdx"," — puis ",[100,504,505],{},"153-SimplePyramid"," branche le tout sur Gray-Scott.",[76,508,509],{},[417,510],{"alt":511,"src":512},"Itération naïve (ligne par ligne) vs itération pyramidale — figure du cours","/school/day-2/pyramid-iteration.png",[76,514,515],{},[424,516,517],{},"À gauche, l'itération naïve balaye tout le domaine à chaque pas ; à droite, l'ordre pyramidal\nréel du cours — figure du support officiel, © Pierre Aubert (LAPP).",[76,519,520,521,524,525,528,529,532,533,536],{},"Le dossier fournit même l'",[79,522,523],{},"auto-tuning"," : ",[100,526,527],{},"scriptFindBestPyramid.sh"," balaie les tailles de\npyramide et retient la meilleure pour ",[424,530,531],{},"ta"," machine. La leçon finale de la journée : le trafic\nmémoire s'amortit ",[79,534,535],{},"sur les itérations",", pas seulement sur l'espace.",[109,538,540,541],{"id":539},"le-tp-grayscott2026day-2","Le TP — ",[100,542,102],{},[76,544,545,546,549,550,553],{},"L'environnement est figé avec ",[79,547,548],{},"pixi"," (canaux ",[100,551,552],{},"prefix.dev/phoenix"," + conda-forge — gcc, cmake,\nHDF5, TBB, libs Phoenix), donc reproductible sans conteneur :",[369,555,557],{"className":371,"code":556,"language":373,"meta":374,"style":374},"cd GrayScott2026/day-2\npixi install                      # toute la chaîne d'outils, épinglée\npixi shell\nmkdir -p build && cd build\ncmake .. $(phoenixcmake-config --cmake) && make -j$(nproc)\nmake plot_all                     # lance toutes les mesures de performance\n",[100,558,559,568,579,587,606,644],{"__ignoreMap":374},[378,560,561,565],{"class":380,"line":381},[378,562,564],{"class":563},"s2Zo4","cd",[378,566,567],{"class":399}," GrayScott2026/day-2\n",[378,569,570,572,575],{"class":380,"line":392},[378,571,548],{"class":395},[378,573,574],{"class":399}," install",[378,576,578],{"class":577},"sHwdD","                      # toute la chaîne d'outils, épinglée\n",[378,580,582,584],{"class":380,"line":581},3,[378,583,548],{"class":395},[378,585,586],{"class":399}," shell\n",[378,588,590,592,595,598,600,603],{"class":380,"line":589},4,[378,591,396],{"class":395},[378,593,594],{"class":399}," -p",[378,596,597],{"class":399}," build",[378,599,404],{"class":403},[378,601,602],{"class":563}," cd",[378,604,605],{"class":399}," build\n",[378,607,609,612,615,618,621,624,627,629,632,635,638,641],{"class":380,"line":608},5,[378,610,611],{"class":395},"cmake",[378,613,614],{"class":399}," ..",[378,616,617],{"class":403}," $(",[378,619,620],{"class":395},"phoenixcmake-config",[378,622,623],{"class":399}," --cmake",[378,625,626],{"class":403},")",[378,628,404],{"class":403},[378,630,631],{"class":395}," make",[378,633,634],{"class":399}," -j",[378,636,637],{"class":403},"$(",[378,639,640],{"class":395},"nproc",[378,642,643],{"class":403},")\n",[378,645,647,650,653],{"class":380,"line":646},6,[378,648,649],{"class":395},"make",[378,651,652],{"class":399}," plot_all",[378,654,655],{"class":577},"                     # lance toutes les mesures de performance\n",[76,657,658,659,662,663,666,667,670,671,498,674,677,678,681],{},"Alternative officielle : les ",[79,660,661],{},"conteneurs apptainer"," du cours\n(",[100,664,665],{},"performancewithstencil_cpu_job","). Le dossier ",[100,668,669],{},"GPU/"," du dépôt existe mais n'est pas au\nprogramme du jour ; ",[100,672,673],{},"TBB/",[100,675,676],{},"27-Deliverable"," et ",[100,679,680],{},"29-DistributedComputing"," seront exploités plus\ntard dans l'école.",[109,683,685],{"id":684},"en-vidéo-les-replays-officiels","En vidéo — les replays officiels",[76,687,688,689,692],{},"Deux épisodes des ",[79,690,691],{},"Gray Scott Thursdays"," (la série de webinaires de l'école) couvrent\nexactement la matière du jour :",[694,695],"yt-embed",{"caption":696,"id":697,"title":698},"Replay — Modern C++ CPU computing with std::algorithm (Gray Scott Thursdays)","HwxGGAOpUAo","Modern C++ CPU computing with std::algorithm",[694,700],{"caption":701,"id":702,"title":703},"Replay — Memory Allocations : le coût réel de la mémoire (Gray Scott Thursdays)","NX23_VRoMXw","Memory Allocations",[109,705,707],{"id":706},"sources-matériel-officiel","Sources & matériel officiel",[709,710,711,725,752,768,782],"ul",{},[712,713,714,717,718],"li",{},[79,715,716],{},"Le cours en ligne"," (chapitres CPU 1 → 20 : mesure, layout, vectorisation, blocking,\nPyramide, valgrind/kcachegrind, OpenMP, TBB) :\n",[719,720,724],"a",{"href":721,"rel":722},"https://cta-lapp.pages.in2p3.fr/COURS/PerformanceWithStencil/",[723],"nofollow","cta-lapp.pages.in2p3.fr/COURS/PerformanceWithStencil",[712,726,727,730,731,736,737,736,742,736,747],{},[79,728,729],{},"Les slides du jour"," (PDF, wiki GitLab de l'école) :\n",[719,732,735],{"href":733,"rel":734},"https://gitlab.in2p3.fr/CTA-LAPP/COURS/GRAY_SCOTT_REVOLUTIONS/GrayScott2026/-/wikis/uploads/GrayScottDay-2/3-lecture_presentation_gray_scott_cpp.pdf",[723],"présentation C++ du matin"," ·\n",[719,738,741],{"href":739,"rel":740},"https://gitlab.in2p3.fr/CTA-LAPP/COURS/GRAY_SCOTT_REVOLUTIONS/GrayScott2026/-/wikis/uploads/GrayScottDay-2/4-lecture_blocking.pdf",[723],"blocking",[719,743,746],{"href":744,"rel":745},"https://gitlab.in2p3.fr/CTA-LAPP/COURS/GRAY_SCOTT_REVOLUTIONS/GrayScott2026/-/wikis/uploads/GrayScottDay-2/5-lecture_simpler_advanced_blocking.pdf",[723],"advanced blocking simplifié",[719,748,751],{"href":749,"rel":750},"https://gitlab.in2p3.fr/CTA-LAPP/COURS/GRAY_SCOTT_REVOLUTIONS/GrayScott2026/-/wikis/uploads/GrayScottDay-2/2026-06-gray-scott-blocking.pdf",[723],"gray-scott-blocking (juin 2026)",[712,753,754,757,758,736,763],{},[79,755,756],{},"Les dépôts GitLab"," :\n",[719,759,762],{"href":760,"rel":761},"https://gitlab.in2p3.fr/CTA-LAPP/COURS/PerformanceWithStencil",[723],"PerformanceWithStencil (code du TP)",[719,764,767],{"href":765,"rel":766},"https://gitlab.in2p3.fr/CTA-LAPP/COURS/GRAY_SCOTT_REVOLUTIONS/GrayScott2026",[723],"GrayScott2026 (l'école)",[712,769,770,757,773,736,777],{},[79,771,772],{},"Replays vidéo (YouTube)",[719,774,691],{"href":775,"rel":776},"https://www.youtube.com/playlist?list=PLiZttWgOMudb6PsUoWtxY3G4Gv8f2lurG",[723],[719,778,781],{"href":779,"rel":780},"https://www.youtube.com/watch?v=ILu6hCSGEMY&list=PLiZttWgOMudYvZkFakaN47nL2RqNR5TvT",[723],"replays 2025",[712,783,784,757,787,736,792,736,797],{},[79,785,786],{},"L'environnement",[719,788,791],{"href":789,"rel":790},"https://prefix.dev/phoenix",[723],"canal pixi phoenix",[719,793,796],{"href":794,"rel":795},"https://cta-lapp.pages.in2p3.fr/COURS/GRAY_SCOTT_REVOLUTIONS/GrayScott2026/redirection.html?label=partContainerListTimeTable",[723],"conteneurs du cours",[719,798,801],{"href":799,"rel":800},"https://cta-lapp.pages.in2p3.fr/COURS/GRAY_SCOTT_REVOLUTIONS/GrayScott2026/index.html",[723],"site de l'école",[803,804,805],"style",{},"html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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}",{"title":374,"searchDepth":392,"depth":392,"links":807},[808,815,819,821,822],{"id":111,"depth":392,"text":112,"children":809},[810,811,812,813,814],{"id":116,"depth":581,"text":117},{"id":212,"depth":581,"text":213},{"id":233,"depth":581,"text":234},{"id":265,"depth":581,"text":266},{"id":335,"depth":581,"text":336},{"id":429,"depth":392,"text":430,"children":816},[817,818],{"id":433,"depth":581,"text":434},{"id":461,"depth":581,"text":462},{"id":539,"depth":392,"text":820},"Le TP — GrayScott2026/day-2/",{"id":684,"depth":392,"text":685},{"id":706,"depth":392,"text":707},"Deux sessions le 23 juin : C++ 17/20/23 sur CPU le matin, optimisation avancée (blocking & Pyramide) l'après-midi. Mesurer, comprendre le stencil, exploiter le cache.","md",[826],{"label":827,"icon":828,"to":721,"target":829},"Cours en ligne","i-lucide-graduation-cap","_blank",{"icon":831},"lucide:square-code",true,{"title":19,"description":823},"rfc1PXhfS6nrRW1FjN_KrLiOEA19N_PqSvdHPOx1h80",[836,838],{"title":15,"path":16,"stem":17,"description":837,"children":-1},"Le vocabulaire et les principes. Optimiser suppose de comprendre le fonctionnement du matériel et de localiser les pertes de temps.",{"title":23,"path":24,"stem":25,"description":839,"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.",1783172490823]