|
Alexis Pereda, David Hill, Claude Mazel, Bruno Bachelet
(LIMOS, Clermont-Ferrand, France) |
|
2018 International Conference on High Performance Computing and Simulation (HPCS)
Orléans, France
16-20 juillet 2018 |
Cet article propose d'utiliser des techniques de métaprogrammation par patrons (templates) pour décider à la compilation quelles parties d'une séquence de code dans une boucle peuvent être parallélisées. Cette approche s'applique à caractériser la manière d'accéder à chaque variable dans une boucle (lecture ou écriture), tout d'abord pour décider comment la boucle devrait être divisée pour permettre l'analyse pour la parallélisation de chaque partie, et ensuite pour détecter si les itérations à l'intérieur de chaque boucle sont indépendantes et peuvent donc être exécutées en parallèle.
Les conditions qui permettent la parallélisation d'une boucle sont d'abord expliquées pour justifier l'algorithme de décision proposé. Ensuite, une solution reposant sur une bibliothèque C++ est présentée qui utilise les patrons d'expressions (expression templates) pour obtenir les informations pertinentes nécessaires à la décision de parallélisation d'une boucle, et des métaprogrammes pour décider de paralléliser la boucle et générer un code parallèle.
|