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

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- )


Gurtovoy – Abrahams (2004)


Measuring full programs to identify idioms
Porkolab-Mihalicza


Debugging (GPCE 2006) + Profiling (Splst 2007)
Steven Watanabe (2008)



Ad-hoc measurement, non-standard tools
Boost library extension
Compilers was not optimized for TMPs
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
Instrumentation framework
Code instrumentation
Code instrumentation 2
Warning generation
Overhead
Deviation of
overhead
Modified compiler
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áb
[email protected], [email protected], [email protected]
Descargar

Subtle Waves Template