Perflint: A Context Sensitive Performance Advisor for C++ Programs

We present perflint, a new industrial strength open source analysis tool that identifies suboptimal use patterns of the C++ standard library. Simply by recompiling and running on a representative input set, programmers receive context sensitive performance advice on their use of standard library data structures and algorithms. Our solution consists of collecting traces of relevant library operations and state during program execution, and then recognizing patterns for which there is a faster alternative, based on a model made of performance guarantees in the C++ language standard and machine knowledge. perflint has already found hundreds of suboptimal patterns in a set of large C++ benchmarks. In one case, following the advice and changing one line of code resulted in 17% program run time reduction.

[1]  Graham Wood,et al.  Automatic Performance Diagnosis and Tuning in Oracle , 2005, CIDR.

[2]  David A. Padua,et al.  A dynamically tuned sorting library , 2004, International Symposium on Code Generation and Optimization, 2004. CGO 2004..

[3]  James R. Larus,et al.  Making Pointer-Based Data Structures Cache Conscious , 2000, Computer.

[4]  Gabriel Marin Semi-Automatic Synthesis of Parameterized Performance Models for Scientific Programs , 2003 .

[5]  Jing Xu,et al.  Rule-based automatic software performance diagnosis and improvement , 2008, WOSP '08.

[6]  Benoît Dageville,et al.  Self-Tuning for SQL Performance in Oracle Database 11g , 2009, 2009 IEEE 25th International Conference on Data Engineering.

[7]  Lawrence Rauchwerger,et al.  Custom Memory Allocation for Free , 2006, LCPC.

[8]  Larry Carter,et al.  Multi-processor Performance on the Tera MTA , 1998, Proceedings of the IEEE/ACM SC98 Conference.

[9]  B. Miller,et al.  Improving Online Performance Diagnosis by the Use of Historical Performance Data , 1999, ACM/IEEE SC 1999 Conference (SC'99).

[10]  Johannes Singler,et al.  The libstdc++ parallel mode: software engineering considerations , 2008, ICSE 2008.

[11]  Johannes Singler,et al.  The GNU libstdc++ parallel mode: software engineering considerations , 2008, IWMSE '08.

[12]  Insung Park,et al.  A Performance Advisor Tool for Shared-Memory Parallel Programming , 2000, LCPC.

[13]  James R. Larus,et al.  Cache-conscious structure layout , 1999, PLDI '99.

[14]  Bernd Mohr,et al.  Automatic performance analysis of hybrid MPI/OpenMP applications , 2003, Eleventh Euromicro Conference on Parallel, Distributed and Network-Based Processing, 2003. Proceedings..

[15]  Jack J. Dongarra,et al.  Automated empirical optimizations of software and the ATLAS project , 2001, Parallel Comput..

[16]  Nancy M. Amato,et al.  A framework for adaptive algorithm selection in STAPL , 2005, PPoPP.

[17]  Li Li,et al.  Model-Based Performance Diagnosis of Master-Worker Parallel Computations , 2006, Euro-Par.

[18]  Benoît Dageville,et al.  Automatic SQL Tuning in Oracle 10g , 2004, VLDB.

[19]  Matthew Arnold,et al.  A Survey of Adaptive Optimization in Virtual Machines , 2005, Proceedings of the IEEE.

[20]  Allen D. Malony,et al.  Capturing and automating performance diagnosis: the Poirot approach , 1995, Proceedings of 9th International Parallel Processing Symposium.

[21]  Sibylle Schupp,et al.  Making the Usage of STL Safe , 2002, Generic Programming.

[22]  Laxmikant V. Kalé,et al.  Towards automatic performance analysis , 1996, Proceedings of the 1996 ICPP Workshop on Challenges for Parallel Processing.

[23]  Robert Hundt,et al.  HP Caliper: a framework for performance analysis tools , 2000, IEEE Concurr..

[24]  Yuefan Deng,et al.  New trends in high performance computing , 2001, Parallel Computing.

[25]  Matthew Arnold,et al.  Adaptive optimization in the Jalapeño JVM , 2000, OOPSLA '00.