[{"data":1,"prerenderedAt":298},["ShallowReactive",2],{"navigation_docs_fr":3,"-fr-gray-scott-school-jour-1":66,"-fr-gray-scott-school-jour-1-surround":293},[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":15,"badge":68,"body":69,"category":68,"description":286,"extension":287,"links":68,"meta":288,"navigation":290,"path":16,"seo":291,"stem":17,"tags":68,"__hash__":292},"docs_fr/fr/1.gray-scott-school/03.jour-1.md",null,{"type":70,"value":71,"toc":276},"minimark",[72,77,86,91,94,98,101,104,116,120,127,130,133,137,192,195,198,202,218,225,228,236,240,251,254,259,263,266],[73,74,76],"h2",{"id":75},"_1-le-cpu","1. Le CPU",[78,79,80,81,85],"p",{},"Un processeur est composé de plusieurs ",[82,83,84],"strong",{},"cœurs"," indépendants. La fréquence d'horloge stagne\ndepuis ~2005 (limite thermique) ; la performance vient désormais du nombre de cœurs, ce qui rend\nle parallelisme incontournable.",[78,87,88],{},[82,89,90],{},"La performance provient du nombre de cœurs, non de la fréquence brute.",[92,93],"d1-cpu",{},[73,95,97],{"id":96},"_2-la-compilation","2. La compilation",[78,99,100],{},"La compilation traduit le C++ en code machine avant l'exécution, avec optimisation. Ses quatre\nétapes : préprocesseur, compilation (assembleur + optimisation), assemblage, édition de liens.\nL'optimisation et la vectorisation naissent à la compilation.",[102,103],"d1-compile",{},[78,105,106,107,111,112,115],{},"Options recommandées : ",[108,109,110],"code",{},"-O3 -march=native",". Sans optimisation (",[108,113,114],{},"-O0","), le code peut être un\nordre de grandeur plus lent.",[73,117,119],{"id":118},"_3-la-vectorisation-simd","3. La vectorisation (SIMD)",[78,121,122,126],{},[123,124,125],"em",{},"Single Instruction, Multiple Data"," : une instruction traite plusieurs valeurs à la fois. Le\ncompilateur la génère automatiquement quand la boucle est régulière (accès contigus, sans\ndépendances).",[128,129],"d1-simd",{},[78,131,132],{},"Gain typique : ×4 à ×16 selon la largeur des registres (SSE 128 bits, AVX2 256 bits, AVX-512 512 bits).",[73,134,136],{"id":135},"_4-concurrence-et-parallélisme","4. Concurrence et parallélisme",[138,139,140,155],"table",{},[141,142,143],"thead",{},[144,145,146,149,152],"tr",{},[147,148],"th",{},[147,150,151],{},"Concurrence",[147,153,154],{},"Parallélisme",[156,157,158,170,181],"tbody",{},[144,159,160,164,167],{},[161,162,163],"td",{},"Objectif",[161,165,166],{},"masquer l'attente (E/S, réseau)",[161,168,169],{},"accélérer le calcul",[144,171,172,175,178],{},[161,173,174],{},"Matériel",[161,176,177],{},"possible sur un seul cœur",[161,179,180],{},"exige plusieurs cœurs",[144,182,183,186,189],{},[161,184,185],{},"Domaine",[161,187,188],{},"serveurs, E/S asynchrones",[161,190,191],{},"calcul intensif",[193,194],"d1-conc",{},[78,196,197],{},"La concurrence est un outil de structuration ; le parallélisme en est le résultat lorsque le\nmatériel le permet.",[73,199,201],{"id":200},"_5-memory-bound-et-compute-bound","5. Memory-bound et compute-bound",[203,204,205,212],"ul",{},[206,207,208,211],"li",{},[82,209,210],{},"Compute-bound"," — limité par les unités de calcul → ajouter des cœurs aide.",[206,213,214,217],{},[82,215,216],{},"Memory-bound"," — limité par la bande passante ; les cœurs attendent les données → l'ajout de\ncœurs n'apporte qu'un gain marginal.",[78,219,220,221,224],{},"L'intensité arithmétique (opérations par octet chargé) détermine le régime. Les stencils ont une\nfaible intensité arithmétique et sont généralement memory-bound. Outil d'analyse de référence :\nle ",[82,222,223],{},"roofline model",".",[226,227],"d1-roofline",{},[229,230],"gs-bar-chart",{":categories":231,":series":232,"note":233,"title":234,"unit":235},"[\"Registre\",\"L1\",\"L2\",\"L3\",\"RAM\"]","[{\"name\":\"Latence\",\"values\":[0.3,1,4,15,100]}]","Ordres de grandeur typiques — un accès RAM coûte ~100× un hit L1.","Le mur mémoire : coût d'un accès selon le niveau"," ns",[73,237,239],{"id":238},"_6-la-pureté","6. La pureté",[78,241,242,243,246,247,250],{},"Une fonction est ",[82,244,245],{},"pure"," lorsque sa sortie ne dépend que de ses entrées, sans effet de bord. Un\ncalcul pur n'a pas de dépendance cachée : il est parallélisable sans ",[123,248,249],{},"data race",". Un schéma à\ndouble tampon (lecture d'un tableau, écriture d'un autre) est pur et trivialement parallèle.",[252,253],"d1-buffers",{},[78,255,256],{},[82,257,258],{},"La pureté est ce qui autorise la parallélisation sans bug.",[73,260,262],{"id":261},"_7-tests-unitaires-en-calcul-scientifique","7. Tests unitaires en calcul scientifique",[78,264,265],{},"Les arrondis flottants interdisent la comparaison exacte. Trois règles guident la validation :",[267,268,274],"pre",{"className":269,"code":271,"language":272,"meta":273},[270],"language-text","1.  Comparaison avec tolérance    |a − b| \u003C ε   (jamais d'égalité stricte)\n2.  Vérification d'invariants      énergie, symétrie, absence de NaN, cas analytique\n3.  Équivalence séq. / parallèle   une divergence révèle une data race\n","text","",[108,275,271],{"__ignoreMap":273},{"title":273,"searchDepth":277,"depth":277,"links":278},2,[279,280,281,282,283,284,285],{"id":75,"depth":277,"text":76},{"id":96,"depth":277,"text":97},{"id":118,"depth":277,"text":119},{"id":135,"depth":277,"text":136},{"id":200,"depth":277,"text":201},{"id":238,"depth":277,"text":239},{"id":261,"depth":277,"text":262},"Le vocabulaire et les principes. Optimiser suppose de comprendre le fonctionnement du matériel et de localiser les pertes de temps.","md",{"icon":289},"lucide:cpu",true,{"title":15,"description":286},"t3O0ZKq35V7dMbPe4rbTTcqNOeXWyLZSjKiaHC9Phq8",[294,296],{"title":11,"path":12,"stem":13,"description":295,"children":-1},"La présentation de la CINERI en direct à toute la Gray Scott School 2026 — session spéciale du 25 juin, retransmise sur le live officiel.",{"title":19,"path":20,"stem":21,"description":297,"children":-1},"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.",1783172490800]