Stage de DEA et thèse : analyse d'échappement

[English] [Index]

Les langages de programmation récents comme ML ou Java offrent souvent un mécanisme de récupération automatique de la mémoire allouée en tas, le garbage collector ou glaneur de cellules. Cependant, le mécanisme de garbage collection (GC) prend du temps à l'exécution. Mon stage de DEA et ma thèse ont eu pour but d'étudier l'analyse d'échappement, technique fondée sur l'interprétation abstraite, qui permet d'allouer les données en pile plutôt que dans le tas, soulageant ainsi la charge du GC.

Mon stage de DEA a eu lieu d'avril à septembre 1996 à l'INRIA Rocquencourt, sous la direction d'Alain Deutsch. J'ai ensuite continué ce travail pendant ma thèse toujours avec Alain Deutsch à l'INRIA Rocquencourt, sous la direction de Patrick Cousot. Je l'ai soutenue le 7 décembre 2000, à l'Ecole Polytechnique. Voici son résumé.

L'analyse d'échappement est une analyse statique visant à déterminer si la durée de vie des données dépasse leur portée statique. Si elle ne la dépasse pas, les données peuvent être allouées en pile. Cette thèse étend les travaux précédents sur l'analyse d'échappement en traitant pour la première fois complètement deux langages réalistes : Objective Caml et Java. Nos contributions sont à la fois théoriques et pratiques.

Le principal apport théorique est la preuve de correction des analyses à partir d'une sémantique du langage analysé, en utilisant les techniques de l'interprétation abstraite. Pour ML, les opérations impératives (affectations), le polymorphisme, les fonctions d'ordre supérieur, les types récursifs sont traités. Deux représentations des valeurs abstraites d'échappement sont proposées : l'une, très efficace, utilise des entiers et l'autre, plus précise mais plus coûteuse, des types annotés. La comparaison entre ces deux représentations permet de trouver laquelle offre le meilleur compromis. Pour Java, nous proposons une nouvelle technique permettant de prendre en compte les affectations de façon plus précise que pour ML, tout en conservant une analyse rapide.

Une implantation complète dans des compilateurs a été effectuée, afin d'étudier deux applications de l'analyse d'échappement : l'allocation en pile et l'élimination des synchronisations (cette dernière application ne concerne pas ML). Les effets de ces optimisations font l'objet d'une étude expérimentale détaillée sur de gros programmes. Cette étude a montré que l'allocation en pile améliore la localité des données, diminue la charge du GC (glaneur de cellules) et le temps d'allocation, et que ses effets dépendent considérablement du type de GC et de cache utilisé. Les algorithmes utilisés ont été choisis de façon à fournir des analyses particulièrement efficaces. L'expérience a montré que la représentation utilisant des entiers est celle qui donne le meilleur rapport coût/précision.

Publications sur ce sujet

[1]
Bruno Blanchet. Escape Analysis for Java(TM). Theory and Practice. ACM Transactions on Programming Languages and Systems, 25(6):713-775, November 2003.

[2]
Bruno Blanchet. Analyse d'échappement. Applications à ML et Java(TM). Escape Analysis. Applications to ML and Java(TM). PhD thesis, École Polytechnique, 7 December 2000. En anglais. In English. Prix de thèse de l'École Polytechnique. Thesis prize of Ecole Polytechnique.

[3]
Bruno Blanchet. Escape Analysis for Object Oriented Languages. Application to Java(TM). In Conference on Object-Oriented Programming, Systems, Languages and Applications (OOPSLA'99), pages 20-34, Denver, Colorado, November 1999.

[4]
Bruno Blanchet. Escape Analysis: Correctness Proof, Implementation and Experimental Results. In 25th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages (POPL'98), pages 25-37, San Diego, California, January 1998. ACM Press.

[5]
Bruno Blanchet. Garbage Collection statique. Rapport de DEA, INRIA, Rocquencourt, September 1996. En français.

Logiciel

Vous pouvez télécharger mon allocateur en pile pour ML (copyright INRIA), fichier au format .tar.gz, à installer selon les indications incluses dans la distribution. Ce fichier contient une version modifiee du compilateur Objective Caml, version 1.05, qui effectue de l'allocation en pile. Pour plus d'information sur Objective Caml, version de ML réalisée à l'INRIA par le projet Cristal, voir http://caml.inria.fr. L'allocateur en pile a été testé uniquement sous Unix (Linux, Solaris, Digital Unix, ...). Si vous essayez ce logiciel, s'il vous plait, laissez-moi un petit mot pour me donner vos impressions, à Bruno point Blanchet arobas ens point fr.
Bruno Blanchet