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.
Modern C++, C++23/26, asynchronisme, tenseur, parallélisme, metaprogramming, tag dispatching.
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.
Centre INRIA de l’université de Bordeaux