Optimisation Itérative De Biblioth`Eques De Calculs Par
Total Page:16
File Type:pdf, Size:1020Kb
D´epartement d’informatique Ecole´ doctorale ”SoFt” UFR de Sciences Optimisation It´erative de Biblioth`eques de Calculs par Division Hi´erarchique de Codes Iterative Optimization of Performance Libraries by Hierarchical Division of Codes THESE` pr´esent´ee et soutenue publiquement le 14 septembre 2007 pour l’obtention du Doctorat de l’universit´ede Versailles Saint-Quentin (sp´ecialit´einformatique) par S´ebastien Donadio Composition du jury Directeur : William Jalby Pr´esident : Albert Cohen Rapporteurs : Jean-Fran¸cois Collard Boris Sabanin Examinateurs : Denis Barthou David Padua Michel Guillemet Mis en page avec la classe thloria. Remerciements Ces trois ans de th`ese sur l’optimisation de code pour le calcul scientifique m’ont permis de rencontrer de nombreuses personnes talentueuses. Ce travail a pu ˆetre men´egrˆace au financement de la soci´et´eBULL, de l’Association Nationale de la Recherche Technique, du laboratoire ITACA et du Commissariat `al’Energie´ Atomique D´epartement des Applications Militaires. Je tiens `aremercier particuli`erement mon directeur de th`ese Monsieur William Jalby qui par son investissement et sa motivation m’a permis d’acqu´erir une tr`es grande rigueur dans mon travail. Sa disponibilit´e, son engagement, son aide ne me feront jamais oublier la chance que j’ai eu `atravailler avec lui. Je voudrais ´egalement exprimer toute ma reconnaissance `amon encadrant de th`ese Monsieur Denis Barthou qui a su me diriger tout au long de ce travail. Son travail et ses explications m’ont beaucoup appris sur ce m´etier de chercheur. Il en est de mˆeme pour Monsieur Albert Cohen qui m’a co-encadr´edurant cette th`ese. Personne avec qui j’ai eu plaisir `atravailler et qui a su me montrer par son extrˆeme motivation des domaines passionnants. Je remercie ´egalement dans une autre langue le Professeur David Padua qui m’a accueilli dans son ´equipe dans l’Universit´ed’Illinoisa ` Urbana-Champaign tout comme Monsieur Claude Camozzi qui m’a suivi pendant ces 3 ans avec la soci´et´eBULL ainsi que Monsieur Michel Guillemet qui a particip´e`ace jury de th`ese. Je tenais `aremercier particuli`erement la soci´et´eBULL qui, grˆace `asa bourse CIFRE, m’a permis de travailler dans de tr`es bonnes conditions tout en assurant un support technique et un acc`es `aune technologie de pointe (machines, compilateurs, syst`emes d’exploitation). Je remercie ´egalement le travail de mes deux rapporteurs Messieurs Jean-Fran¸cois Collard et Boris Sabanin qui m’ont apport´ebeaucoup d’informations pendant la fin de l’´ecriture de ce manuscrit. Je voulais ´egalement remercier l’´equipe dans laquelle j’ai travaill´equi m’a toujours beaucoup apport´e. J’ai aim´eparticuli`erement travailler avec Patrick Carribault qui a ´et´eun tr`es bon coll`egue durant toutes ces ann´ees. Merci ´egalement `aChristophe Lemuet pour m’avoir laiss´e l’utilisation d’un tr`es beau programme, `aJean-Thomas Acquaviva, Sid Touati, Henri-Pierre Charles, Jean Papadopoulo, St´ephane Zuckerman d’avoir pris la suite avec plusieurs coeurs `a l’ouvrage, Marc Perache, Lamia Djoudi, Minhaj Khan, Emmanuel Oseret, Alexandre Duchateau, Julien Jaeger et Souad Koliai. Je remercie ´egalement les membres de l’´equipe de Cryptographie, Aur´elie Bauer, Joana Treger et Sorina Ionica ainsi que d’autres tr`es bon coll`egues du laboratoire PRiSM comme Xiaohui Xue, Tao Wan, Veronika Peralta ou Amir Djouama. Je remercie tout particuli`erement ma famille qui m’a toujours fait confiance ainsi que tous mes amis. i ii R´esum´e La complexit´egrandissante des architectures ne simplifie pas la tˆache des compilateurs `a g´en´erer du code performant et ceci en d´epit de nouvelles phases d’optimisation. Les g´en´erateurs de biblioth`eques comme ATLAS, FFTW et SPIRAL ont r´eussi `a int´egrer cette difficult´epar l’utilisation de recherche it´erative. Cette derni`ere g´en`ere diff´erentes versions de programmes et s´electionne la meilleure d’entre elles. Cette th`ese explore une solution automatique pour adap- ter les applications de calculs intensifs `al’architecture complexe des machines. En reprenant des optimisations d´ej`aconnues, nous montrerons qu’une approche g´en´erative peut ˆetre un outil utile `al’impl´ementation d’une nouvelle approche de compilation hi´erarchique pour la g´en´era- tion de code efficace. Cette m´ethode s’appuiera sur l’utilisation des compilateurs du march´e. Contrairement `aATLAS, cette approche n’est pas du tout sp´ecifique `aun domaine d’applica- tion. Elle peut ˆetre appliqu´ee sur des structures de boucle assez g´en´erales qu’elle divisera en des fragments de code plus simples `aoptimiser pour un compilateur. Grˆace `aces noyaux de codes, nous proposerons une nouvelle approche de g´en´eration de biblioth`eques pour le calcul haute performance. Cette approche s’appuiera sur la recomposition de ces codes avec un mod`ele tr`es simplifi´e, ce qui nous permettra de concurrencer largement certaines biblioth`eques du march´e et particuli`erement celles pour BLAS. Mots-cl´es: Optimisation, Compilateur, Calcul Haute Performance, Transformation, G´en´era- tion, Recherche it´erative Abstract The increasing complexity of hardware features incorporated in modern processors makes high performance code generation very challenging. Library generators such as ATLAS, FFTW and SPIRAL overcome this issue by empirically searching in the space of possible program versions for the one that performs the best. This thesis explores fully automatic solution to adapt a compute-intensive application to the target architecture. By mimicking complex sequences of transformations useful to optimize real codes, we show that generative programming is a practical tool to implement a new hierarchical compilation approach for the generation of high performance code relying on the use of state-of-the-art compilers. As opposed to ATLAS, this approach is not application-dependant but can be applied to fairly generic loop structures. Our approach relies on the decomposition of the original loop nest into simpler kernels. These kernels are much simpler to optimize and furthermore, using such codes makes the performance trade off problem much simpler to express and to solve. Finally, we propose a new approach for the generation of performance libraries based on this decomposition method. We show that our method generates high-performance libraries, in particular for BLAS. Keywords: Optimization, Compiler, High Performance Computing, Transformation, Genera- tion, Iterative Search Contents List of Figures viii Glossary xi 1 Introduction 1.1 Contexte........................................ 1 1.2 Historique...................................... 1 1.3 Lam´emoirecache ................................. 3 1.4 Traductionettransformations. ........ 5 1.5 Les g´en´erateurs de code sp´ecifique aux domaines . ............. 8 1.6 Contributions................................... ... 9 1.7 Plan........................................... 10 2 Meta-programming Languages for High-Performance Computing 12 2.1 Motivation ...................................... 12 2.2 Features of a meta-programmation language for high-performance computing . 15 2.3 MetaOCaml, purely generative approach . ......... 20 2.4 PrerequisiteofMetaOCaml . ..... 21 2.5 Generative Strategies for Loop Transformations . ............. 22 2.5.1 PrimitiveTransformations. ..... 22 2.5.2 Composition of Transformations . ..... 25 2.5.3 Generative Implementation of Complex Optimizations ........... 29 2.5.4 SafeMeta-ProgramminginC . 36 2.5.5 Conclusion ................................... 40 2.6 A generation language : X-Language . ....... 42 2.6.1 Macro-languages ............................... 42 2.6.2 X-Languagepragmause . 43 2.6.3 Implementation................................ 46 2.6.4 Experimentalresults . 52 2.6.5 Bibliography .................................. 54 2.7 Conclusion ...................................... 56 v 2.7.1 Comparisonoftwoapproaches . 56 2.7.2 Limitations ................................... 57 3 Loop Optimization using Kernel Decomposition 58 3.1 Introduction.................................... 58 3.2 Why is it important to divide the problem? . ........ 60 3.2.1 X-languageFramework . 60 3.3 Hierarchical decomposition in kernels . ........... 61 3.3.1 LoopTiling................................... 63 3.3.2 LoopTransformations . 64 3.3.3 Data-Layout Optimization . 64 3.3.4 Kernel Micro-optimization and Execution . ........ 65 3.3.5 PuttingKernelstoWork . 67 3.4 Experimentalresults .. .. .. .. .. .. .. .. .. .. .. ..... 67 3.4.1 Implementation................................ 67 3.4.2 ExperimentalEnvironment . 68 3.4.3 Afew1Dkernels................................ 68 3.4.4 KernelsforDGEMM.............................. 69 3.5 Conclusion ...................................... 72 4 Kernel Recomposition 75 4.1 LibraryGenerationScheme . ..... 75 4.1.1 PerformanceModeling . 78 4.2 Recompositionalgorithm . ..... 78 4.2.1 Withonlyonekernel............................. 78 4.2.2 Extension for different kernels . ...... 79 4.3 Code generation from constraint systems . .......... 80 4.4 Experimentalresults .. .. .. .. .. .. .. .. .. .. .. ..... 81 4.4.1 Matrix-vector multiply on Itanium 2 . ...... 82 4.4.2 A real example: dot-product library generation . .......... 83 4.5 Decision tree for DGEMV and DGEMM . 87 4.5.1 Results compared to vendor libraries . ....... 87 4.5.2 LAPACKpotrs................................. 91 4.6 Methodextension................................. 92 4.6.1 Kerneltests................................... 92 4.6.2 Model for an accurate performance