Asynchronisme et données multidimensionnelles standard dans ```ChameleonPP```

Réaliser un support d’asynchronisme standard dans la bibliothèque chameleonpp et explorer l’utilisation de primitives de haut niveau standards pour l'écriture de noyaux de calculs tensoriels.

chameleon propose l’implémentation d’un sous ensemble des routines BLAS/LAPACK capable d’utiliser les architectures parallèles modernes (mémoire partagée et distribuée, multi GPUs). Suite à l’introduction des vues multidimensionnelles avec std::mdspan en C++23, std::linalg permetra en C++26 de réaliser des appels standards aux BLAS1/2/3. Le standard propose donc un ensemble de fonctions libres avec une semantic de haut niveau derrière lesquelles l’utilisateur peut appeler l’implémentation BLAS qu’il souhaite. chameleon, grâce à son interface, est un candidat pour un tel support et permet également de pousser cette approche grâce à ces différentes APIs, en particulier son support pout l’asynchronisme. Une premère version de chameleonpp propose une telle implémentation en couvrant les appels aux BLAS3 ainsi qu’en fournissant différents utilitaires côté utilisateur pour étendre ce que le standard propose.

Le but de ce stage est de proposer une preuve de concept de composabilité de chameleonpp avec la nouvelle bibliothèque standard en C++26 std::execution permettant la composition et l’execution asynchrone de fonctions. L’ajout de la gestion générique des ressources d’execution ainsi que leur controle permettra en C++26 d’exprimer l’execution asynchrone de tâches. Le stage devra permettre l’exposition des noyaux de calculs asynchrones de chameleonpp dans l'écosystème asynchrone C++. La première partie du stage permettra la montée en compétence du stagiaire sur la bibliothèque std::execution ainsi que chameleonpp. Ensuite, le stagiaire devra réaliser la mise en place d’une gestion standard de l’asynchronisme dans chameleonpp. Pour mettre en perspective cette nouvelle approche, la mise en place d’un algorithme tensoriel permettra d'évaluer l’expressivité et la performance d’une telle approche.

Mots-clés:

Modern C++, C++23/26, asynchronisme, tenseur, parallélisme, metaprogramming, tag dispatching.

Pré-requis:

Une bonne connaissance de C++ et une appétence pour la programmation avancée en C++ et la découverte de nouveau paradigme de programmation. Connaissance de l'écosystème BLAS/LAPACK.

Contacts :

pierre.esterie@inria.fr

Lieu du stage :

Centre INRIA de l’université de Bordeaux

Référence: