Sublimation: Expanding Data Structures to Enable Data Instance Specific Optimizations

Knowledge of specific properties of input data should influence the compilation process, as different characteristics of input data might have different optimal solutions. However, in many applications, it is far from obvious how this can be achieved, as irregularity in program code prevents many optimizations from being applied. Therefore, we propose a two-phase compilation system, which in the first phase analyzes the code and transforms it into a regular intermediate code using a technique we call sublimation. Sublimation is a process in which different access functions in code are remapped using a common, injective access function. The resulting, regular intermediate code is compiled in a second phase, when the actual data input set is known. This allows for optimizations that compile the regular intermediate into a new code that uses data structures especially tailored to the input data provided. We evaluate this compilation chain using three sparse matrix kernels and show that our data instance specific optimization can provide considerable speedups.

[1]  Joel H. Saltz,et al.  Run-Time Parallelization and Scheduling of Loops , 1991, IEEE Trans. Computers.

[2]  Lawrence Rauchwerger,et al.  Hybrid Analysis: Static & Dynamic Memory Reference Analysis , 2004, International Journal of Parallel Programming.

[3]  Keshav Pingali,et al.  Next-generation generic programming and its application to sparse matrix computations , 2000, ICS '00.

[4]  Keshav Pingali,et al.  Data-Centric Transformations for Locality Enhancement , 2001, International Journal of Parallel Programming.

[5]  William Pugh,et al.  SIPR: A New Framework for Generating Efficient Code for Sparse Matrix Computations , 1998, LCPC.

[6]  Vikram S. Adve,et al.  Automatic pool allocation: improving performance by controlling data structure layout in the heap , 2005, PLDI '05.

[7]  Rudolf Eigenmann,et al.  Optimizing irregular shared-memory applications for distributed-memory systems , 2006, PPoPP '06.

[8]  Timothy A. Davis,et al.  The university of Florida sparse matrix collection , 2011, TOMS.

[9]  Harry A. G. Wijshoff,et al.  Automatic Restructuring of Linked Data Structures , 2009, LCPC.

[10]  Stephen Curial,et al.  MPADS: memory-pooling-assisted data splitting , 2008, ISMM '08.

[11]  Harry A. G. Wijshoff,et al.  How to unleash array optimizations on code using recursive data structures , 2010, ICS '10.

[12]  Erwin M. Bakker,et al.  A Compile/Run-time Environment for the Automatic Transformation of Linked List Data Structures , 2007, 16th International Conference on Parallel Architecture and Compilation Techniques (PACT 2007).

[13]  Erwin M. Bakker,et al.  Characterizing the performance penalties induced by irregular code using pointer structures and indirection arrays on the intel core 2 architecture , 2009, CF '09.

[14]  Aart J. C. Bik,et al.  Automatic Data Structure Selection and Transformation for Sparse Matrix Computations , 1996, IEEE Trans. Parallel Distributed Syst..