Extending Automatic Parallelization to Optimize High-Level Abstractions for Multicore

Automatic introduction of OpenMP for sequential applications has attracted significant attention recently because of the proliferation of multicore processors and the simplicity of using OpenMP to express parallelism for shared-memory systems. However, most previous research has only focused on C and Fortran applications operating on primitive data types. C++ applications using high-level abstractions, such as STL containers and complex user-defined types, are largely ignored due to the lack of research compilers that are readily able to recognize high-level object-oriented abstractions and leverage their associated semantics. In this paper, we automatically parallelize C++ applications using ROSE, a multiple-language source-to-source compiler infrastructure which preserves the high-level abstractions and allows us to unambiguously leverage their known semantics. Several representative parallelization candidate kernels are used to explore semantic-aware parallelization strategies for high-level abstractions, combined with extended compiler analyses. Those kernels include an array-based computation loop, a loop with task-level parallelism, and a domain-specific tree traversal. Our work extends the applicability of automatic parallelization to modern applications using high-level abstractions and exposes more opportunities to take advantage of multicore processors.

[1]  Bronis R. de Supinski,et al.  OpenMP Shared Memory Parallel Programming - International Workshops, IWOMP 2005 and IWOMP 2006, Eugene, OR, USA, June 1-4, 2005, Reims, France, June 12-15, 2006. Proceedings , 2008, IWOMP.

[2]  Bronis R. de Supinski,et al.  A C++ Infrastructure for Automatic Introduction and Translation of OpenMP Directives , 2003, WOMPAT.

[3]  Dennis Gannon,et al.  HPC++: experiments with the parallel standard template library , 1997, ICS '97.

[4]  Amer Diwan,et al.  SUIF Explorer: an interactive and interprocedural parallelizer , 1999, PPoPP '99.

[5]  Aart J. C. Bik,et al.  Efficient Exploitation of Parallelism on Pentium III and Pentium 4 Processor-Based Systems , 2001 .

[6]  Yunheung Paek,et al.  Parallel Programming with Polaris , 1996, Computer.

[7]  Siegfried Benkner VFC: The Vienna Fortran Compiler , 1999, Sci. Program..

[8]  Barbara Chapman,et al.  Shared Memory Parallel Programming with Open MP , 2005 .

[9]  Keith D. Cooper,et al.  Engineering a Compiler , 2003 .

[10]  Steven W. K. Tjiang,et al.  SUIF: an infrastructure for research on parallelizing and optimizing compilers , 1994, SIGP.

[11]  Bronis R. de Supinski,et al.  Semantic-Driven Parallelization of Loops Operating on User-Defined Containers , 2003, LCPC.

[12]  Qing Yi,et al.  Applying Loop Optimizations to Object-Oriented Abstractions Through General Classification of Array Semantics , 2004, LCPC.

[13]  Nancy M. Amato,et al.  STAPL: An Adaptive, Generic Parallel C++ Library , 2001, LCPC.

[14]  Mitsuhisa Sato,et al.  Design of OpenMP Compiler for an SMP Cluster , 1999 .

[15]  Andrew Lumsdaine,et al.  OpenMP Extensions for Generic Libraries , 2008, IWOMP.

[16]  Sibylle Schupp,et al.  STLlint: lifting static checking from languages to libraries , 2006, Softw. Pract. Exp..

[17]  Haoqiang Jin,et al.  The ParaWise Expert Assistant - Widening Accessibility to Efficient and Scalable Tool Generated OpenMP Code , 2004, WOMPAT.

[18]  Ken Kennedy,et al.  Optimizing Compilers for Modern Architectures: A Dependence-based Approach , 2001 .

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

[20]  Bronis R. de Supinski,et al.  OpenMP in a New Era of Parallelism, 4th International Workshop, IWOMP 2008, West Lafayette, IN, USA, May 12-14, 2008, Proceedings , 2008, IWOMP.

[21]  Dennis Gannon,et al.  Sage++: An Object-Oriented Toolkit and Class Library for Building Fortran and C++ Restructuring Tool , 1994 .