A Reproducible Research Methodology for Designing and Conducting Faithful Simulations of Dynamic Task-based Scientific Applications
Méthodologie de recherche reproductible appliquée à la conception et à la conduite de simulations d'applications de calcul scientifique dynamiques à base de tâches.
Résumé
The evolution of High-Performance Computing systems has taken a sharp
turn in the last decade. Due to the enormous energy consumption of
modern platforms, miniaturization and frequency scaling of processors
have reached a limit. The energy constraints has forced hardware
manufacturers to develop alternative computer architecture solutions
in order to manage answering the ever-growing need of performance
imposed by the scientists and the society. However, efficiently
programming such diversity of platforms and fully exploiting the
potentials of the numerous different resources they offer is extremely
challenging. The previously dominant trend for designing high
performance applications, which was based on large monolithic codes
offering many optimization opportunities, has thus become more and
more difficult to apply since implementing and maintaining such
complex codes is very difficult. Therefore, application developers
increasingly consider modular approaches and dynamic application
executions. A popular approach is to implement the application at a
high level independently of the hardware architecture as Directed
Acyclic Graphs of tasks, each task corresponding to carefully
optimized computation kernels for each architecture. A runtime system
can then be used to dynamically schedule those tasks on the different
computing resources.
Developing such solutions and ensuring their good performance on a
wide range of setups is however very challenging. Due to the high
complexity of the hardware, to the duration variability of the
operations performed on a machine and to the dynamic scheduling of the
tasks, the application executions are non-deterministic and the
performance evaluation of such systems is extremely
difficult. Therefore, there is a definite need for systematic and
reproducible methods for conducting such research as well as reliable
performance evaluation techniques for studying these complex systems.
In this thesis, we show that it is possible to perform a clean,
coherent, reproducible study, using simulation, of dynamic HPC
applications. We propose a unique workflow based on two well-known and
widely-used tools, Git and Org-mode, for conducting a reproducible
experimental research. This simple workflow allows for pragmatically
addressing issues such as provenance tracking and data analysis
replication. Our contribution to the performance evaluation of dynamic
HPC applications consists in the design and validation of a
coarse-grain hybrid simulation/emulation of StarPU, a dynamic
task-based runtime for hybrid architectures, over SimGrid, a versatile
simulator for distributed systems. We present how this tool can
achieve faithful performance predictions of native executions on a
wide range of heterogeneous machines and for two different classes of
programs, dense and sparse linear algebra applications, that are a
good representative of the real scientific applications.
Le calcul à hautes performances s’est vu contraint d’évoluer de façon
radicalement différente durant la dernière décennie. La
miniaturisation et l’augmentation de la fréquence des processeurs a
atteint ses limites en raison des consommations d’énergies
déraisonnables induites. Cette contrainte énergétique a conduit les
fabricants de matériel à développer de nombreuses architectures
alternatives afin de répondre aux besoins toujours croissants de
puissance de calcul de la communauté scientifique. Cependant,
programmer efficacement des plates-formes aussi diverses et exploiter
l’intégralité des ressources qu’elles offrent s’avère extrêmement
difficile. L’approche classique de conception d’application haute
performance consistant à se reposer sur des codes monolithiques
offrant de nombreuses opportunités d’optimisation est ainsi devenue de
plus en plus difficile à appliquer en raison de difficulté
d’implémentation, de portabilité et de maintenance. Par conséquent,
les développeurs de telles applications considèrent de plus en plus
couramment des approches modulaires et une exécution dynamique des
différents composants. Une approche populaire consiste à implémenter
ces applications à relativement haut niveau, indépendamment de
l’architecture matérielle, en se reposant sur un paradigme basé sur la
notion de graphe de tâches où chaque tâche correspond à un noyau de
calcul soigneusement optimisé pour chaque architecture cible. Un
système de runtime peut alors ensuite être utilisé pour ordonnancer
dynamiquement ces tâches sur les différentes ressources de calcul à
disposition.
Garantir l’efficacité de telles applications sur un large spectre de
configurations reste néanmoins un défi majeur. En effet, en raison de
la grande complexité du matériel, de la variabilité des temps
d’exécution des calculs et de la dynamicité d’ordonnancement des
tâches, l’exécution des applications n’est pas déterministe et
l’évaluation de la performance de ces systèmes est très délicate. Par
conséquent, il est nécessaire de disposer d’une méthodologie
systématique, rigoureuse et reproductible pour conduire de telles
études et évaluer la performance de tels systèmes.
Dans cette thèse, nous montrons qu’il est possible d’étudier les
performances de telles applications dynamiques à l’aide de
simulations, et ce de façon fiable, cohérente et reproductible. Nous
proposons dans un premier temps une méthode de travail originale basée
sur deux outils couramment utilisés dans notre communauté, Git et
Org-mode, et permettant de mettre en oeuvre une recherche
expérimentale reproductible. Cette approche simple permet de résoudre
de façon pragmatique des problèmes tels que le suivi de la provenance
des expériences ou la réplication de l’analyse des données
expérimentales. Dans un second temps, nous contribuons à l’évaluation
de performance d’applications dynamiques en concevant et en validant
une simulation/émulation hybride à gros grains de StarPU, un runtime
dynamique utilisant le paradigme de graphes de tâches et
particulièrement adapté à l’exploitation d’architecture
hybrides. Cette simulation est réalisée à l’aide de SimGrid, un
simulateur polyvalent de systèmes distribués. Nous présentons comment
notre approche permet d’obtenir des prédictions de performances
d’exécutions réelles fiables sur un large panel de machines
hétérogènes. Nous appliquons notre approche à deux classes de
programmes différentes, les applications d’algèbre linéaire dense et
creuse, qui sont représentatives d’un grand nombre d’applications
scientifiques.