170 likes | 260 Views
Compiler Support for Profiling C++ Template Metaprograms. József Mihalicza , Norbert Pataki , Zoltán Porkoláb Eötvös Loránd University Faculty of Informatics Dept. Of Programming Languages and Compilers. Outline. Templates in C++ Template metaprograms
E N D
Compiler Support for Profiling C++ Template Metaprograms József Mihalicza, Norbert Pataki, Zoltán PorkolábEötvös Loránd UniversityFaculty of Informatics Dept. Of Programming Languages and Compilers
Outline Templates in C++ Template metaprograms Efficiency problems with C++ templates Earlier efforts / Related works Our solution Examples SPLST’11
C++ templates Parametric polymorphism Fundamental tools for generic programming Unconstrained Implemented by instantiation Typical solution: multiply header files Examples: standard library, inlc. STL SPLST’11
Template metaprograms Unruh 1994: prime numbers Has been proved to be Turing-complete Functional programming paradigm Recursion + pattern matching Referential transparency No assignment (Almost) no i/o SPLST’11
Template metaprograms 2 template <int N> struct Factorial { enum { value = Factorial<N-1>::value * N }; }; template <> struct Factorial<0> { enum { value = 1 }; }; int main() { int fact5 = Factorial<5>::value; } SPLST’11
Template metaprogram usage Expression templates (blitz++, …) Parser generators (boost::spirit, …) Static interface checking (boost::concept, …) Configuration management (boost::math, …) Active libraries (…) DSL integration (Porkolab-Sinkovics,GPCE2010) SPLST’11
Efficiency issues Recursive header inclusions Data structures (recursive templates) Imitating data manipulations Complex, unclear syntax Compilers was not optimized for TMPs Hard to predict compilation time and memory usage SPLST’11
Earlier efforts Veldhuizen (1996- ) Ad-hoc measurement, non-standard tools Gurtovoy – Abrahams (2004) Measuring full programs to identify idioms Porkolab-Mihalicza Debugging (GPCE 2006) + Profiling (Splst 2007) Steven Watanabe (2008) Boost library extension Compilers was not optimized for TMPs Hard to predict compilation time and memory usage SPLST’11
Measuring compilation units Advantages Easy, platform and compiler independent Get the big picture, understand behaviour Statistically correct Drawbacks Artificial problems Not revealing details in complex programs Overheads (code generation, preprocessor) SPLST’11
Preprocessor overhead SPLST’11
Warning generation Overhead Deviation of overhead
Summary • We have to measure template metaprograms (and perhaps all large projects with many templates) • Measuring compilation units are not feasible in real-world industrial projects • Preprocessing step has a significant overhead • Instrumentation has a linear distortion • Modification of compiler can eliminate warning overhead • Template metaprogram profiling is still learned
Thank you for your attention! Questions? József Mihalicza, Norbert Pataki, Zoltán Porkolábjmihalicza@gmail.hu, patakino@elte.hu, gsd@elte.hu