Advanced techniques for high performance code generation
Techniques avancées de génération de code pour la performance
Abstract
As a response to an increasing demand for computing performance,hardware manufacturers propose new parallel hardware architectures of very different nature, each with their own API and programming model.This makes high performance applications more complex to develop with traditional programming practices, especially when multiple architectures are targeted.As a response, libraries leveraging compile-time code generation were developed to facilitate portable high performance programming with high level abstractions such as Domain-Specific Embedded Languages (DSELs).In this thesis, we first explore existing metaprogramming practices acrossa wide variety of languages, then evaluate current C++ template metaprogrammingtechniques in the framework of BLAS-like kernel generation.We then cover new metaprogramming techniques based on compile-time C++ code execution by implementing compile-time parsers for two languages:Brainfuck, and a language called Tiny Math Language (TML).The Brainfuck parser is provided with several code generation backends to study and compare different code generation techniques, whereas TML is usedto study code generation using portable high performance computing libraries.In order to assess the compile-time impact of these various metaprogramming techniques, we propose a new benchmarking methodology that usesClang's built-in profiler, enabling compile-time performance scaling analysis beyond black-box benchmarking.
En réponse à la demande croissante de puissance de calcul,les constructeurs de matériel proposent de nouvelles architectures parallèles de très différentes natures, et ayant chacune leurs propres API et modèle de programmation.Cela rend les applications haute performance plus complexes à développer avec des méthodes de programmation traditionnelles, d'autant plus lorsque plusieurs architectures sont ciblées.En réponse à cette demande, des bibliothèques exploitant la génération de code à la compilation furent développées pour faciliter la programmation haute performance avec des abstractions de haut niveau tels que les langages dédiés externes. Dans cette thèse, nous explorons en premier temps les techniques de métaprogrammation existant à travers un large panel de langages, puis nous évaluons les techniques actuelles de métaprogrammation de templates C++dans le cadre de la génération de noyaux de calculs de type BLAS. Nous couvrons ensuite de nouvelles techniques de métaprogrammation basées sur l'exécution de code C++ à la compilation en implémentant des parsers pour deux langages: Brainfuck, et un langage appelé Tiny Math Language (TML). Le parser Brainfuck est fourni avec plusieurs backends de génération de code pour étudier différentes techniques de génération de code, tandis que TML est utilisé pour étudier la génération de code en utilisant des bibliothèques portables haute performance. Pour évaluer l'impact de ces diverses techniques de métaprogrammation,nous proposons une nouvelle méthodologie de benchmarking qui exploite le profiler intégré de Clang, ce qui permet l'analyse de performance en temps de compilation au-delà des mesures de performance en boîte noire.
Origin | Version validated by the jury (STAR) |
---|