diff --git a/Nvidia_STL.typ b/Nvidia_STL.typ index e1fce06d683898d59383cb1694a2dee6ffdd0f75..cc0690fea74fde896c381368c07d4cbad3a73832 100644 --- a/Nvidia_STL.typ +++ b/Nvidia_STL.typ @@ -199,8 +199,55 @@ std::for_each(std::execution::par_unseq, ``` ] +#slide( + title: "Le compilateur ne peut pas tout copier", +)[ +Attardons nous sur cet extrait de code `[device_v = v.data(), cst]` + +Le compilateur ne va pas simplement copier le pointeur `v.data()`, il va +remonter à l'allocation mémoire de la zone pointée et va s'occuper de la rendre +accessible depuis le device. + +Par conséquent, il n'est pas possible d'utiliser de la mémoire allouée par du +code qui n'aurait pas été compilé par nvc++ (ex: une librairie paratagée comme +OpenCV). + +Le compilateur s'appuie principalement sur la CUDA Unified memory. Pour plus +d'information à ce sujet, je vous recommande ce billet de blog : +#link("https://developer.nvidia.com/blog/unified-memory-cuda-beginners") +] + #new-section-slide("Le futur avec C++23 (views et mdspans)") -#new-section-slide("Notions à retenir") +#slide( + title: "", +)[ + La prochaine étape majeure dans ce paradigme apparaît avec C++23. Depuis C++ 20, + les spans et les views ont fait leur apparition. + Les views sont une forme d'itérateurs à évaluation paresseuse. + + Dans C++23, on voit apparaître de nouvelles méthodes pour combiner les views + comme par exemple le produit cartésien pour générer les indices d'une matrice. + + Et la grande nouveauté, les mdspans qui permettent de gérer des structures de + données multidimensionnelles. +] + +#new-section-slide("Exemple de code C++23 et notions à retenir") + +#slide( + title: "Notions essentielles à retenir", +)[ + - On parallélise notre code avec le compilateur nvc++ du SDK HPC de Nvidia + - Il faut passer le paramètre stdpar au compilateur pour lui dire comment + paralléliser (cpu, gpu). + - Pour paralléliser un algorithme STL, il faut lui passer une politique + d'exécution + - Connaître et comprendre la différence entre les 4 politiques d'exécution + - On ne peut pas passer des données du _host_ par référence au _device_ + - On capture les zones mémoire par copie pour les passer au _device_ + - On ne peut pas capturer de la mémoire allouée par un code qui n'a pas été + compilé par nvc++. +] #new-section-slide("Questions ?") \ No newline at end of file