Contributions aux environnements de programmation pour le calcul intensif. (Contributions to intensive computing programming environment)

Mes recherches concernent les outils de developpement pour le calcul intensif. Une application sera dite intensive s'il faut fortement l'optimiser pour obtenir la puissance de calcul requise pour repondre aux contraintes, d'une part, de temps d'execution et, d'autre part, de ressources de la plateforme d'execution. De telles applications se retrouvent aussi bien dans le domaine du calcul scientifique que dans le domaine du traitement de signal intensif (telecommunications, traitement multimedia). Les difficultes de developpement de telles applications sont principalement l'exploitation du parallelisme des architectures d'execution (des supercalculateurs aux systemes sur silicium en passant par les grappes de stations de travail), l'heterogeneite de ces memes architectures et le respect des contraintes de temps et de ressources. Le but de mes recherches est de proposer des outils permettant la programmation efficace des applications de calcul intensif. Ceux-ci peuvent etre des compilateurs, des paralleliseurs ou des environnements de specification. Mes travaux ont commence par les compilateurs paralleliseurs et s'orientent de plus en plus vers les environnements de specification. Ces environnements comportent des compilateurs paralleliseurs. Cette evolution consiste donc a remplacer le langage de programmation et la phase d'analyse des programmes par une specification des algorithmes de plus haut niveau et facilitant la phase d'analyse de dependances. En effet, le but de cette analyse est de retrouver l'essence de l'algorithme code par le programme analyse. La specification de l'algorithme par les seules dependances de donnees permet d'eliminer l'analyse de dependances et d'avoir toute l'information necessaire pour les optimisations du compilateur paralleliseur. Quatre principes dirigent mes recherches : 1. Programmer au plus haut niveau possible. Il ne devrait pas etre de la responsabilite du programmeur de gerer les details de l'execution de son application. Idealement, il devrait exprimer son algorithme et les compilateurs devraient generer le code le plus efficace possible sur l'architecture visee. 2. Promouvoir le parallelisme de donnees. Ce paradigme de programmation permet justement une programmation de haut niveau dans bien des cas. Il est bien adapte au calcul intensif ou les traitements sont souvent reguliers et la quantite de donnees manipulees importante. 3. Optimiser au plus tot dans la chaine de developpement. Je suis convaincu que plus les informations de performances et les optimisations sont faites tot dans le developpement d'une application, plus ce developpement sera rapide et l'application efficace. L'environnement de conception doit donc faire apparaitre ces informations si elles sont disponibles, y compris avant compilation de l'application. 4. Restreindre le domaine d'application. Il est tres difficile d'optimiser tous les programmes en general. Le domaine du calcul intensif lui-meme est deja ambitieux. En se focalisant sur un domaine d'application precis, on peut esperer reduire la variete des applications et ainsi proposer des optimisations adaptees. C'est la voie que j'ai suivie dans mes recherches les plus recentes en restreignant le domaine d'application au traitement de signal intensif.