Orateur
Description
Les performances d’une application exécutée sur du matériel moderne sont étroitement liées à la représentation en mémoire des données d’entrée et de sortie. Cette interaction n’est pas toujours évidente au premier abord et il est préférable de l’aborder à l’aide de conseils d’experts et d’un réglage empirique. De ce point de vue, il est préférable de s’abstenir de contraindre un code à l’utilisation d’une représentation particulière des données dès le début du processus de développement, car cela rendrait difficile toute modification ultérieure dans le cas où des tests de performance montreraient qu’une autre représentation serait plus optimale. Il est donc préférable d’écrire le code de manière indépendante de la représentation des données et de reporter les décisions relatives à celle-ci à un stade ultérieur du cycle de vie de l’application, où leur impact pourra être évalué sur des cas d’utilisation réalistes.
La recherche sur les représentations optimales des données se concentre sur plusieurs défis, notamment les représentations compatibles SIMD, la représentation de structures de données profondément imbriquées et irrégulières, ainsi que le support des organisations hiérarchiques et des stratégies de tuilage. Ces défis sont étroitement liés à l’utilisation efficace de la hiérarchie de cache des processeurs modernes, où le placement des données et les schémas d’accès ont un impact direct sur la localité mémoire et le débit. En parallèle, ces travaux visent à répondre à la demande croissante de portabilité des performances en ciblant à la fois les processeurs et les accélérateurs associés, tels que les GPU. Ce travail s’appuie sur des recherches antérieures menées dans l’écosystème de la physique des hautes énergies, notamment les travaux de Jim Pivarski sur la représentation de données irrégulières et fortement imbriquées, ainsi que sur des contributions plus récentes, telles que la thèse d’Arthur Hennequin au sein de la collaboration LHCb sur SOACollection.
Ce travail présente une approche visant à concevoir une interface de haut niveau, tout en restant hautement optimisée et personnalisable, permettant de définir la représentation en mémoire des structures de données. Ces idées sont concrétisées dans Kiwaku, une bibliothèque C++20 et ultérieure qui exploite la métaprogrammation à la compilation afin d’adapter des structures de données définies par l’utilisateur à une représentation mémoire spécifiée, sans nécessiter de modifications du code existant. À l’heure actuelle, Kiwaku fournit un plug-in prenant en charge les représentations SoA et AoS, permettant de réorganiser une structure de données à l’aide de ces primitives. La conception de la bibliothèque se prête à une intégration future avec les mécanismes de réflexion introduits en C++26, ce qui permettrait d’automatiser davantage l’adaptation des données et de réduire la quantité de code à fournir par l’utilisateur.
| Type d'intervention | retex |
|---|---|
| Temps d'intervention ? | 20mn |