Thèse soutenue

Un modèle de structure de données Cache-aware pour un parallélisme et un équilibrage dynamique de la charge
FR  |  
EN
Accès à la thèse
Auteur / Autrice : Marwa Sridi
Direction : Bruno RaffinVincent Faucher
Type : Thèse de doctorat
Discipline(s) : Mathématiques et informatique
Date : Soutenance le 28/04/2016
Etablissement(s) : Université Grenoble Alpes (ComUE)
Ecole(s) doctorale(s) : École doctorale mathématiques, sciences et technologies de l'information, informatique (Grenoble ; 199.-....)
Partenaire(s) de recherche : Laboratoire : Institut national de recherche en informatique et en automatique (France). Centre de recherche de l'université Grenoble Alpes - Laboratoire Interactions, dynamiques et lasers (Gif-sur-Yvette, Essonne ; 2015-....)
Jury : Président / Présidente : Pierre-Alain Boucard
Examinateurs / Examinatrices : Thierry Gautier
Rapporteurs / Rapporteuses : Gilles Grimaud, Sébastien Limet

Mots clés

FR  |  
EN

Mots clés contrôlés

Résumé

FR  |  
EN

Les architectures parallèles actuelles intègrent des processeurs avec un nombre de cœurs à mémoire partagée de plus en plus important et répondant à des contraintes d'utilisation spécifiques, notamment en matière de gestion de la mémoire cache. Pour tirer parti de cette puissance, un parallélisme unique à mémoire distribuée, nécessaire pour gérer les communications inter-nœuds, présente le désavantage de ne pas s'adapter directement aux particularités des architectures multi-cœurs. De plus, les environnements de calcul à mémoire partagée proposent des techniques pour l'équilibrage de la charge entre les cœurs disponibles, qui se présentent de manière plus délicate dans un contexte de mémoire distribuée. Ainsi, des modèles de programmation tels qu’OpenMP et XKAAPI sont une réponse bien adaptée aux spécificités de ces architectures.Au regard de ces problématiques, nous nous sommes intéressés, à développer une approche Hardware-aware prenant en considération l'organisation hiérarchique des architectures parallèles à mémoire partagée. Notre approche offre un modèle d'optimisation de l'utilisation des espaces de stockage dans ce contexte de parallélisme. Pour démontrer la pertinence de cette approche, nous l'avons implémentée dans le logiciel de simulation en dynamique rapide des fluides et des structures EUROPLEXUS, en se concentrant sur le parallélisme à mémoire partagée, complémentaire d'une approche à mémoire distribuée développée par ailleurs. De par son large panel d'applications, EUR0PLEXUS est caractérisé par une structure de données très riche et des dépendances très complexes entre ses routines. Nous nous sommes concentrés sur l'accélération de la boucle principale itérant sur les éléments du maillage. L'hétérogénéité des formulations et des matériaux des éléments pouvant co-exister dans un même modèle simulé engendre une grande variabilité entre les coûts des itérations de cette boucle. Une première parallélisation de cette boucle avec la bibliothèque XKAAPI basée sur un ordonnancement dynamique par vol de tâches a été implémentée. Cependant, malgré l'accélération atteinte par cette implémentation parallèle, les performances ont été freinées par les coûts des accès fréquents et dispersés à une structure de données complexe rendant l'exécution du code délicate à optimiser. A cause de cette structuration, une grande partie du temps d'exécution est écoulée dans des défauts de cache.Ces travaux reposent sur l’implémentation d'un modèle de structure de données assurant une meilleure localité des accès. Il consiste majoritairement à passer de la structure de données globale dans laquelle les champs physiques sont stockés dans des tableaux séparés à une structure basée sur le stockage des données dans des structures indépendantes appelées groupes. Ces groupes contiennent les données relatives à un certain nombre d'éléments dans des tableaux locaux. Ce nombre est un paramètre réglable selon la taille des niveaux du cache. Concrètement, cette méthode revient à imbriquer la boucle élémentaire dans une boucle itérant sur les groupes. Les itérations sur les groupes sont distribuées sur les cœurs de l'architecture. L'exécution de la boucle interne est séquentielle par cœur. Les meilleurs résultats sont obtenus pour des groupes de la taille du cache L2 privé par cœur. Pour cette taille particulière, l'utilisation d'un équilibrage dynamique de charge sous XKAAPI nous a permis de doubler l'accélération de la boucle élémentaire par rapport à une parallélisation avec XKAAPI de la version de référence du code.La deuxième partie de cette thèse repose sur la parallélisation de la boucle élémentaire à l'intérieur de la boucle déjà parallélisée. Nous avons démontré que ce second niveau de parallélisme est moins performant que celui à un seul niveau. Cependant, ce parallélisme imbriqué pourrait être intéressant sur les architectures Xeon Phi de Intel intégrant des cœurs hyper-threadés au niveau de leurs unités de calcul.