Code Optimization Based on Source to Source Transformations Using Profile Guided Metrics Youenn Lebras
Total Page:16
File Type:pdf, Size:1020Kb
Code optimization based on source to source transformations using profile guided metrics Youenn Lebras To cite this version: Youenn Lebras. Code optimization based on source to source transformations using profile guided met- rics. Automatic Control Engineering. Université Paris-Saclay, 2019. English. NNT : 2019SACLV037. tel-02443231 HAL Id: tel-02443231 https://tel.archives-ouvertes.fr/tel-02443231 Submitted on 17 Jan 2020 HAL is a multi-disciplinary open access L’archive ouverte pluridisciplinaire HAL, est archive for the deposit and dissemination of sci- destinée au dépôt et à la diffusion de documents entific research documents, whether they are pub- scientifiques de niveau recherche, publiés ou non, lished or not. The documents may come from émanant des établissements d’enseignement et de teaching and research institutions in France or recherche français ou étrangers, des laboratoires abroad, or from public or private research centers. publics ou privés. s Code optimization based on source to source transformations using profile guided metrics Thèse de doctorat de l’Université Paris-Saclay préparée à l’Université de Versailles-Saint-Quentin-en-Yvelines Ecole doctorale n◦580 Sciences et technologies de l’information et de la NNT : 2019SACLV037 communication (STIC) Spécialité de doctorat: "Programmation : modèles, algorithmes, langages, architecture" Thèse présentée et soutenue à Versailles, le 3 Juillet 2019, par YOUENN LEBRAS Composition du Jury : Anthony Scemama IR CNRS, HdR, Université de Toulouse Rapporteur Angelo Steffenel ) McF HdR, Université de Reims Champagne-Ardenne Rapporteur Michel Masella CEA DRF, HdR, Saclay Examinateur Denis Barthou PR. Université de Bordeaux Président Sophie Robert McF, Université d’Orleans Examinateur William Jalby PR, Univesité de Versailles Saint-Quentin Directeur de thèse Andres S. Charif-Rubial PhD., PeXL Co-encadrant Romain Dolbeau PhD ATOS BULL Invité iii Declaration of Authorship I, Youenn LEBRAS, declare that this thesis titled, “Code optimization based on source to source transformations using profile guided metrics” and the work presented in it are my own. I confirm that: • This work was done wholly or mainly while in candidature for a research degree at this University. • Where any part of this thesis has previously been submitted for a degree or any other qualification at this University or any other institution, this has been clearly stated. • Where I have consulted the published work of others, this is always clearly attributed. • Where I have quoted from the work of others, the source is always given. With the exception of such quotations, this thesis is entirely my own work. • I have acknowledged all main sources of help. • Where the thesis is based on work done by myself jointly with others, I have made clear exactly what was done by others and what I have contributed myself. Signed: Youenn LEBRAS Date: 07/03/2019 v UVSQ Abstract Paris-Saclay UVSQ - Li-Parad PhD. Student in Computer Science Code optimization based on source to source transformations using profile guided metrics by Youenn Lebras Modern high performance processor architectures tackle performance issues by heavily relying on increased vector lengths and advanced memory hierarchies to deliver high performance. Manual optimization of production HPC codes became a difficult task when having to man- age multiple architecture dependent transformations. Developers usually trust compilers to automatically address these performance issues, but they deploy static performance models and heuristics which, must remain conservative or even fail in the worst case. Compiler optimization choices can be refines by using feedback data from dynamic profiling. But, it does not always consider some metrics and is rarely aggressive enough regarding metric data collection. On the other hand, performance analysis tools are pretty good at detecting specific performance issues, but only return observations on the quality and on the execution of the code. Our goal is to develop a framework will allow to perform of source code trans- formations based on performance analysis tools metrics. This framework will be integrated into the MAQAO tool suite. We present an FDO tool with a set of source-to-source transfor- mations guided by metrics coming from the various MAQAO tools and open to user advices. This framework can also be used to simplify the development by automatically perform- ing some simple, but time-consuming and error-prone transformations (e.g. loop/function specialization). vii Acknowledgements Avant toute chose, je voudrais remercier M. William Jalby, pour m’avoir acceuilli au sein du laboratoire et pour m’avoir suivi, orienté et soutenu durant cette thèse. Je voudrais aussi remercier Andrès S. Charif-Rubial pour son encadrement. Je suis reconnaissant envers mes rapporteurs, Anthony Scemama et Angelo Steffenel pour avoir eu la patience de lire ce manuscrit et m’avoir fait des retours pour l’améliorer et sur mes travaux. Mes années de thèses n’ont pas été de tout repos, mais grâce aux membres de ce labo- ratoire, elles m’ont paru plus facile à vivre. C’est pourquoi j’adresse un grand merci chacun d’entre eux, pour m’avoir aidé et soutenu que ce soit au travail ou en dehors via les team building au Montbauront et autres occasions. Cédric, pour avoir le courage d’agréger nos MPR pas toujours palpitant chaque mois, pour les soirées graphes avant les reviews et pour les tournées payées. Emmanuel, pour ces longues discussions durant nos trajets pour Teratec. Hugo, mon coéquipier breton de l’équipe, pour nos discussions au montbauront. Jasper, pour tes médecines douces et techniques de relaxation. Mathieu, pour avoir eu la patience (oui, la patience) de m’avoir eu en voisin de bureau et de m’aider à régler de nombreux problèmes d’interface chaise-clavier (que ce soit avec maqao ou pas) ainsi que pour tes citations toujours très inspirées et ton humour noir. A tous, un grand merci ! Je remercie bien évidemment tous les autres membres du laboratoire avec qui j’ai passé moins de temps, mais avec qui j’ai tout autant apprécié travailler/discuter/etc. Kevin, notre stagiaire qui un jour écrira son rapport ; Pablo pour m’avoir aidé dans de nombreuses dé- marches et avec qui j’ai apprécié travailler et donner des cours ; Yohan, doctorant et com- pagnon de galère de thèse (adum et formations), Nathalie et sylvain sans qui mon parcours n’aurait peut-être pas été le même, Clément, Marie, Sebastien, pour les différentes discus- sions et moments qui ont fait que ces années de thèse sont passées si vite. Evidemment, merci à mes parents et ma soeur, pour leur soutien et pour leur patience lorsqu’ils tentaient de comprendre quel était exactement mon sujet de thèse et en quoi con- sistait mes travaux. Un merci plus personnel et tout particulier à Chloé qui m’a soutenue autant (et aussi longtemps) que possible durant cette thèse et ce malgré ce qu’elle vivait. J’espère t’avoir autant soutenu et rendu le bonheur que tu as pu m’apporter. Pour tout ça, je lui dédicace cette thèse. viii Un autre remerciement personnel, à mes amis qui sont là pour moi depuis de nombreuses années, Romain et MP, Julien, Jaunathan, Gaetan et Pierre (surtout pour les bières après le travail), Xavier, Jeremy, Zac, Anthony, Cassandre, etc. Il me faudrait encore quelques pages pour citer tout le monde donc je m’arrête là, mais vous pouvez toujours mettre votre nom dans la partie laissée en blanc qui suit. Merci, ! And finally, after all these thanks, I would like to thank you random citizen! Yes you, who gonna read this thesis (or at least a brief part). Thank you for thinking that there is something interesting in this manuscript. ix Contents Declaration of Authorship iii Abstract v Acknowledgements vii 1 Background1 1.1 Evolution of HPC Processor Architectures...................1 1.1.1 Uni-core Design Details..........................2 1.1.2 Memory Technology...........................5 1.2 With Great Evolution Comes Great Difficulties................8 1.2.1 Vectorization Evolution..........................8 1.2.2 Memory Organization.......................... 10 1.3 Compilers..................................... 12 1.3.1 Introduction................................ 12 1.3.2 Limitations................................ 13 1.4 Performance Analysis Tools........................... 14 1.4.1 Static Analysis.............................. 14 1.4.2 Dynamic Analysis............................. 16 Using Sampling.............................. 16 Using Tracing............................... 18 1.4.3 Global view using both.......................... 19 1.5 Optimization Tools & Techniques........................ 21 1.5.1 Compiler Optimization Techniques................... 21 1.5.2 Flag Research............................... 22 1.5.3 Profile Guided Optimization (PGO)................... 22 1.5.4 Libraries.................................. 23 1.5.5 Directives................................. 24 1.5.6 Domain Specific Language........................ 24 1.5.7 Source-to-Source............................. 25 1.5.8 Auto-tuning................................ 26 x 1.6 Conclusion..................................... 26 2 ASSIST 29 2.1 Background.................................... 29 2.1.1 Specifications / Context......................... 29 2.1.2 Existing Tools for Source-to-Source Transformation.......... 30 Cetus................................... 30 Par4All & PIPS.............................. 31 OpenC++................................. 31 DMS Software Re-engineering Toolkit.................. 31 LLVM (Clang