TY - JOUR
T1 - In search of a program generator to implement generic transformations for high-performance computing
AU - Cohen, Albert
AU - Donadio, Sébastien
AU - Garzaran, Maria Jesus
AU - Herrmann, Christoph
AU - Kiselyov, Oleg
AU - Padua, David
N1 - Funding Information:
This work is supported by exchange programs between the French CNRS, the University of Illinois, and the German DAAD. We wish to thank Paul Feautrier, Vikram Adve, Marc Snir, Changhao Jiang, Patrick Meredith, Xiaoming Li, Chris Lengauer and Walid Taha. We are also indebted to the anonymous reviewers for this special issue and for the first MetaOCaml workshop; they pointed out important references and contributed elegant solutions to some issues raised in the original version of this paper.
PY - 2006/9
Y1 - 2006/9
N2 - The quality of compiler-optimized code for high-performance applications is far behind what optimization and domain experts can achieve by hand. Although it may seem surprising at first glance, the performance gap has been widening over time, due to the tremendous complexity increase in microprocessor and memory architectures, and to the rising level of abstraction of popular programming languages and styles. This paper explores in-between solutions, neither fully automatic nor fully manual ways to adapt a computationally 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 means to implement architecture-aware optimizations for high-performance applications. This work explores the promises of generative programming languages and techniques for the high-performance computing expert. We show that complex, architecture-specific optimizations can be implemented in a type-safe, purely generative framework. Peak performance is achievable through the careful combination of a high-level, multi-stage evaluation language-MetaOCaml-with low-level code generation techniques. Nevertheless, our results also show that generative approaches for high-performance computing do not come without technical caveats and implementation barriers concerning productivity and reuse. We describe these difficulties and identify ways to hide or overcome them, from abstract syntaxes to heterogeneous generators of code generators, combining high-level and type-safe multi-stage programming with a back-end generator of imperative code.
AB - The quality of compiler-optimized code for high-performance applications is far behind what optimization and domain experts can achieve by hand. Although it may seem surprising at first glance, the performance gap has been widening over time, due to the tremendous complexity increase in microprocessor and memory architectures, and to the rising level of abstraction of popular programming languages and styles. This paper explores in-between solutions, neither fully automatic nor fully manual ways to adapt a computationally 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 means to implement architecture-aware optimizations for high-performance applications. This work explores the promises of generative programming languages and techniques for the high-performance computing expert. We show that complex, architecture-specific optimizations can be implemented in a type-safe, purely generative framework. Peak performance is achievable through the careful combination of a high-level, multi-stage evaluation language-MetaOCaml-with low-level code generation techniques. Nevertheless, our results also show that generative approaches for high-performance computing do not come without technical caveats and implementation barriers concerning productivity and reuse. We describe these difficulties and identify ways to hide or overcome them, from abstract syntaxes to heterogeneous generators of code generators, combining high-level and type-safe multi-stage programming with a back-end generator of imperative code.
KW - Adaptive libraries
KW - Application-specific program generators
KW - Loop transformations
KW - Multi-stage programming
UR - http://www.scopus.com/inward/record.url?scp=33745665061&partnerID=8YFLogxK
UR - http://www.scopus.com/inward/citedby.url?scp=33745665061&partnerID=8YFLogxK
U2 - 10.1016/j.scico.2005.10.013
DO - 10.1016/j.scico.2005.10.013
M3 - Article
AN - SCOPUS:33745665061
SN - 0167-6423
VL - 62
SP - 25
EP - 46
JO - Science of Computer Programming
JF - Science of Computer Programming
IS - 1
ER -