Mécanisme "stop & go" pour l'optimisation dynamique d'applications multi-coeurs
Contexte :

L'optimisation dynamique consiste à modifier un code binaire, pendant qu'il s'exécute, afin d'améliorer sa performance. Les coûts en temps et en mémoire d'un tel processus d'optimisation doivent être minimisés afin que les gains qu'il engendre les compensent largement.

Cette approche a été utilisée dans plusieurs travaux pour optimiser les programmes mono-threads. Un système dynamique de préchargement de données en cache a été développé récemment à l'ICPS. Ce système insére des instructions de pré-chargement pour les instructions d'accès mémoire de latences trop élevées. Des accélérations significatives sont obtenues sur beaucoup de programmes.
Cependant, avec l'avênement des processeurs multi-coeurs, et donc le développement maintenant presque systématique d'applications multi-threads, cette approche est aujourd'hui plus difficilement applicable. L'optimisation dynamique de tels programmes doit considérer deux niveaux de transformation de code :
Travail à effectuer :

Dans un premier temps, les points d'arrêt du mécanisme "stop & go" devront être définis : comment garantir un état cohérent des données, quels types de synchronisations sont nécessaires, comment stocker les données en cours de traitement, etc. Ensuite, il s'agira de définir un moyen de faire poursuivre l'exécution par d'autres threads. Un prototype sera développé sur un processeur multi-coeurs x86.

Compétences requises : langage C, assembleur x86, linux, gout pour la compilation et l'optimisation de programmes.

Encadrement : Philippe Clauss et Benoît Pradelle

Références bibliographiques :

Jean-Christophe Beyler and Philippe Clauss, Performance Driven Data Cache Prefetching in a Dynamic Software Optimization System, 21st ACM International Conference on Supercomputing, ICS'07, Seattle, WA, USA, June 2007.

Prendre contact avec Philippe Clauss (clauss@icps.u-strasbg.fr)

sujets de projets