Précédent : Méthodes d'analyse
Remonter : Résultats nouveaux Suivant :
Parallélisme
d'instructions
Le but de ce travail [[27]] est de déterminer la performance optimale que l'on peut obtenir avec une mémoire d'une taille donnée. L'algorithme de Belady fournit déjà cette information mais en exploitant uniquement la localité temporelle. Or la plupart des mémoires de haut niveau (proches du processeur) exploitent les localités spatiale et temporelle. Dans ce travail, on étend l'algorithme de Belady à la localité spatiale et on démontre l'optimalité du nouvel algorithme pour le nombre de miss. On montre expérimentalement, à l'aide des Spec95, que le niveau minimal de traffic mémoire est presque atteint.
Ce travail, en collaboration avec Hewlett Packard à Cupertino, a montré la possibilité d'attribuer des probabilités de conflits aux accès à des éléments de tableaux et d'utiliser cette information pour spéculer sur le chargement des données. Ce travail a été publié dans [[24]].
Cette étude concerne l'optimisation de code pour la hiérachie mémoire, thème du projet ESPRIT MHAOTEU [[35]].
Pour estimer le bien-fondé d'une transformation de code, il faut avoir un critère facile à calculer statiquement ou mesurer dynamiquement. Le nombre de cache miss est un tel critère, mais il est extrêmement complexe à calculer statiquement, et coûteux à mesurer. En particulier les cache miss dûs aux conflits mémoire sur un même cache set sont les plus difficiles à contrôler. Récemment, Martonosi et al. en ont donné une formulation comme nombre de points entiers dans une union de polyèdres. La complexité du calcul, déjà très grande dans le cas d'un cache à correspondance directe, explose dans le cas d'un cache associatif par ensembles. En tout état de cause, la formule n'est pas paramétrée par l'ordonnancement des tâches et ne permet donc pas a posteriori une optimisation directe de code.
Nous étudions une autre approche, moins complexe, qui n'est plus basée directement sur le calcul du nombre de cache miss, mais sur le nombre de variables en vie dans chaque cache set. Nous perdons de la précision puisque ces 2 nombres ne sont pas directement liés. En retour, nous gagnons une moindre complexité de calcul ainsi que la prise en compte dans la formule de l'ordonnancement.
Le calcul du nombre de cache miss dans chaque cache set est une extension de nos études passées des fenêtres de références [[3]], appliquées en chaque cache set. Nous avons donc commencé par réimplémenter le calcul des fenêtres de référence dans l'outil Polaris de parallélisation de code [[39]]. Cette implémentation utilise le logiciel de calcul du nombre de points entiers dans les polyèdres développé par Philippe Clauss à l'Université de Strasbourg, qui n'existait pas lors de nos premières études. Nous continuons désormais d'étudier la généralisation des fenêtres de référence, en partenariat avec l'Université de Strasbourg.
Les programmes ``Out-of-core'' sont des programmes dont les données (d'entrée, ou générées au cours de l'exécution) ne tiennent pas dans la mémoire principale. Une solution simple est de compter sur le système de mémoire virtuelle qui paginera à la demande. Il est bien connu que cette solution n'est malheureusement pas acceptable pour le calcul scientifique. Nous proposons donc un algorithme de compilation pour machine séquentielle, algorithme permettant des accélérations atteignant jusqu'à un facteur 100. Ce travail [[31]] est soumis à publication.
L'expansion statique maximale est une méthode fine d'expansion des structures de données visant à gagner du parallélisme. Ce travail a fait l'objet d'une publication à PoPL [[13]]
Participant : Christine Eisenbeis.
Cette action concerne le problème de l'allocation des variables en registres dans les boucles.
Nous savons qu'un dépliage de la boucle peut nous permettre de ne pas utiliser plus de registres que le nombre maximal de variables simultanément en vie à chaque pas de temps. De plus, le pipeline logiciel déplace des tâches entre les itérations et engendre finalement des variables dont la durée de vie est supérieure à la durée d'une itération et qui ne peuvent donc être allouées au même registre à chaque itération. Ceci nécessite, ou bien de déplier la boucle et allouer dans chaque itération du code déplié un registre différent, ou bien de tourner sur plusieurs registres, en effectuant un décalage à chaque itération - par l'introduction d'instructions de copie. Dans les deux cas, on augmente la taille du code, ce qui peut coûter cher en taille de code engendré et en nombre de défauts de cache ou de tampon d'instructions.
Il faut donc réaliser un compromis entre nombre de registres utilisés, dépliage, introduction d'instructions de copie [[33]].
Dans sa thèse [[5]], Sylvain Lelait avait défini un nouveau type de graphe, dit ``meeting graph'', qui permet de modéliser le coloriage et le dépliage dans un même cadre. Nous continuons à étudier les propriétés structurelles du meeting graph.
Un coloriage du graphe avec r couleurs revient à une décomposition en circuits du r-meeting graph associé. Nous étudions les décompositions induites par un ensemble stable de cordes dans un circuit hamiltonien du meeting graph. Cette année, nous avons démontré des relations entre le nombre de cordes et le degré chromatique du graphe. Ce travail est expliqué dans [[38]] et [[37]].
Les différentes heuristiques développées autour de ce problème sont intégrées dans le noyau LORA que Sylvain Lelait continue de développer à l'Université Technologique de Vienne (Autriche). LORA est aussi connecté à SALTO dans le cadre du projet OCEANS par l'intermédiaire de PILO.