Analyse statique et adaptation dynamique du parallélisme

par Pierre Huchant

Thèse de doctorat en Informatique

Sous la direction de Denis Barthou.

Thèses en préparation à Bordeaux , dans le cadre de École doctorale de mathématiques et informatique (Talence, Gironde) , en partenariat avec Laboratoire bordelais de recherche en informatique (laboratoire) .


  • Résumé

    Les applications de calcul scientifique ont besoin de ressources de calcul de plus en plus importantes et beacoup de grand challenges scientifiques exigent des capacités de calcul Exascale (10 puissance 18 calculs par seconde) pour être relevés. L'un des principaux obstacles pour atteindre l'Exascale est la difficulté de programmer les architectures parallèles actuelles. De nouvelles méthodes automatiques sont nécessaires pour combler l'écart entre les développeurs d'applications scientifiques et les experts en calcul haute performance. Par ailleurs, les applications scientifiques devenant de plus en plus complexes et étant supposées s'exécuter à très large échelle, de nouveaux outils sont nécessaires pour aider les développeurs lors de la phase de débogage du développement des applications. Cette thèse explore la combinaison de méthodes statiques et dynamiques pour faciliter la programmation des applications de calcul haute performance. Deux enjeux majeurs sont étudiés : la complexité de programmation des architectures hétérogènes et la prévention des interblocages dans les programmes parallèles. La première partie de cette thèse s'intéresse à l'adaptation automatique des tâches de calcul aux architectures hétérogènes. Plus précisément, nous proposons une nouvelle méthode pour faciliter la programmation des architectures hétérogènes composées de plusieurs périphériques de calcul (CPUs et GPUs). Le programmeur exprime le parallélisme de son application sous forme d'une séquence de tâches de calcul sans se soucier des problèmatiques liées à l'architecture sur laquelle son code sera exécuté. Ensuite notre méthode partitionne automatiquement chaque tâche en sous-tâches et chaque périphérique de calcul exécute une des sous-tâches afin de tirer pleinement avantage de toutes les ressources de calcul de la machine. La deuxième partie de cette thèse porte sur la détection et la prévention automatique des interblocages dans les programmes parallèles. Nous proposons un nouvelle analyse statique permettant de détecter précisement les chemins d'exécution menant à des interblocages dans les programmes parallèles. Cette analyse statique est ensuite combinée à une instrumentation dynamique du code afin de prévenir les interblocages à l'exécution.

  • Titre traduit

    Static Analysis and Dynamic Adaptation of Parallelism


  • Résumé

    Scientific applications have an increasing need of resources and many grand scientific challenges require exascale compute capabilities to be addressed. One major concern to achieve exascale is programmability. New automatic methods are required to fill the gap between developers of scientific applications and HPC experts. In addition, as scientific applications are becoming more and more complex and are supposed to run at extreme scale, new tools are required to assist developers in the debugging phase of application development. This thesis explores the combination of static and dynamic methods to improve programmability of HPC applications. Two major issues are investigated: the complexity of programming heterogeneous architectures and the prevention of deadlocks in parallel programs. The first part of this thesis investigates the automatic task adaptation for heterogeneous architectures. More precisely, we propose a new method to improve programmability of heterogeneous architectures. The programmer expresses the parallelism of his application through a sequence of tasks without considering issues related to the underlying architecture where its code will be executed. Then our method automatically partitions the tasks into sub-tasks executed by each device to take full advantage of the machine capabilities. The second part of this thesis investigates the automatic detection and prevention of deadlocks. We propose a novel static analysis to precisely detect execution paths in parallel programs potentially leading to deadlocks. This static analysis is then combined with a dynamic instrumentation of the code to automatically prevent deadlocks at runtime.