Analysis and Execution of a Data-Flow Graph Explicit Model Using Static Metaprogramming - TEL - Thèses en ligne Accéder directement au contenu
Thèse Année : 2021

Analysis and Execution of a Data-Flow Graph Explicit Model Using Static Metaprogramming

Analyse et exécution d'un modèle explicite de graphe de flux de données par métaprogrammation statique

Résumé

As parallel computers with multiple CPUs and GPUs become more and more affordable, this manuscript proposes a framework called Hedgehog to achieve efficient parallel computation on a single heterogeneous node. It is the next version of the HTGS framework to bring more extensibility, more expressiveness, and more safety for the design of parallel code. It uses a data-flow graph programming model, with intrinsic parallelism and advanced composability possibilities, to express coarse-grained parallel execution, and relies on data pipelining to overlap data movement and computation to fully exploit the available hardware. This model is executed unchanged, without any specific scheduling nor load balancing, contrary to other common task-based approaches.These specificities enable a developer to understand better how the computation is effectively conducted on any specific hardware, and with the costless visual feedback offered by the library, can identify issues in the data-flow graph structure and potentially bottlenecks. An image processing and a linear algebra library have been designed based on Hedgehog. Experiments reveal a latency between 1 microsecond and 10 microseconds between tasks that allows achieving more than 85% of the theoretical peak performance, with our implementation of matrix multiplication on a heterogeneous node with 4 NVIDIA GPUs. With the inherent streaming capabilities of the model, we observe, in the case of chained algorithms, the start of the second algorithm more than 40 times faster than executing the algorithms in sequence, with our implementations of LU decomposition and matrix multiplication.To supply safety during development with Hedgehog, some checking has been integrated in the library using C++ metaprogramming techniques that alerts the developer at compile-time (or while writing code with some IDEs) and prevents from failures during runtime. The first level of checking is based on common template metaprogramming techniques combined with concepts to detect incompatible or potentially unsafe elements while building the graph structure. The second level of checking is based on generalized constant expressions to perform analyses on the overall graph structure at compile-time and to alert of potential issues like data races and deadlocks. Those metaprogramming techniques imply no overhead at runtime, and experiments on compilation performance show that only the second level of checking induces a significant overhead (following the theoretical complexity of the algorithms used) that we consider to worth the benefit of more safety.
Alors que les ordinateurs parallèles avec plusieurs CPU et GPU deviennent de plus en plus abordables, ce manuscrit propose un framework appelé Hedgehog pour réaliser des calculs parallèles efficaces sur un seul nœud hétérogène. Il s'agit de la nouvelle version du framework HTGS. Il apporte plus d'extensibilité, plus d'expressivité et plus de sécurité lors de la conception de code parallèle. La bibliothèque logicielle repose sur un modèle de programmation de graphe de flux de données proposant intrinsèquement une forme de parallélisme et des possibilités de composabilité avancées pour exprimer un algorithme parallèle à gros grain. Elle s'appuie aussi sur le pipeline des données pour faire se chevaucher la transmission de données et le calcul afin d'exploiter pleinement le matériel disponible. Ce modèle est exécuté sans être modifié, sans aucune planification spécifique ni équilibrage de charge, contrairement à d'autres approches courantes basées sur la décomposition en tâches.Ces spécificités permettent à un développeur de mieux comprendre comment le calcul est réellement effectué sur n'importe quel matériel spécifique. De plus, la bibliothèque propose un retour visuel sans ajouter de surcoût à l’exécution. Avec celui-ci, l’utilisateur est capable d'identifier les problèmes de structure du graphe de flux de données, notamment les potentiels goulots d'étranglement. Des bibliothèques de traitement d'image et d'algèbre linéaire ont été conçues à partir d'Hedgehog. Les expérimentations révèlent une latence comprise entre 1 microseconde et 10 microsecondes entre les tâches qui permet d'atteindre plus de 85 % des performances théoriques maximales avec notre implémentation de la multiplication matricielle sur un nœud hétérogène avec 4 GPU NVIDIA. Avec les capacités de streaming inhérentes au modèle, nous observons, dans le cas d'algorithmes chaînés, le démarrage du deuxième algorithme plus de 40 fois plus rapidement que l'exécution des algorithmes en séquence, que ce soit avec nos implémentations de décomposition LU ou de multiplication matricielle.Pour assurer une forme de sécurité lors du développement avec Hedgehog, certaines vérifications ont été intégrées dans la bibliothèque à l'aide de techniques de métaprogrammation C++. Elles alertent le développeur au moment de la compilation (ou lors de l'écriture de code avec certains IDE) si un problème est détecté et empêche, de fait, des défaillances lors de l'exécution. Le premier niveau de vérification repose sur des techniques courantes de métaprogrammation avec des patrons combinés à des concepts pour détecter des éléments incompatibles ou potentiellement dangereux lors de la construction du graphe. Le deuxième niveau de vérification repose sur des expressions constantes généralisées pour effectuer des analyses sur la structure globale du graphe au moment de la compilation et alerter de problèmes potentiels tels que des interblocages ou des situations de concurrence. Ces techniques de métaprogrammation n'impliquent aucun surcoût à l'exécution, et les expérimentations sur les performances de la compilation montrent que seul le deuxième niveau de vérification induit un surcoût important (qui suit la complexité théorique des algorithmes utilisés).
Fichier principal
Vignette du fichier
2021UCFAC109_BARDAKOFF.pdf (1.92 Mo) Télécharger le fichier
Origine : Version validée par le jury (STAR)

Dates et versions

tel-03813645 , version 1 (13-10-2022)

Identifiants

  • HAL Id : tel-03813645 , version 1

Citer

Alexandre Bardakoff. Analysis and Execution of a Data-Flow Graph Explicit Model Using Static Metaprogramming. Distributed, Parallel, and Cluster Computing [cs.DC]. Université Clermont Auvergne, 2021. English. ⟨NNT : 2021UCFAC109⟩. ⟨tel-03813645⟩
61 Consultations
205 Téléchargements

Partager

Gmail Facebook X LinkedIn More