LLVM parallel intermediate representation: design and evaluation using OpenSHMEM communications

We extend the LLVM intermediate representation (IR) to make it a parallel IR (LLVM PIR), which is a necessary step for introducing simple and generic parallel code optimization into LLVM. LLVM is a modular compiler that can be efficiently and easily used for static analysis, static and dynamic compilation, optimization, and code generation. Being increasingly used to address high-performance computing abstractions and hardware, LLVM will benefit from the ability to handle parallel constructs at the IR level. We use SPIRE, an incremental methodology for designing the intermediate representations of compilers that target parallel programming languages, to design LLVM PIR. Languages and libraries based on the Partitioned Global Address Space (PGAS) programming model have emerged in recent years with a focus on addressing the programming challenges for scalable parallel systems. Among these, OpenSHMEM is a library that is the culmination of a standardization effort among many implementers and users of SHMEM; it provides a means to develop light-weight, portable, scalable applications based on the PGAS programming model. As a use case for validating our LLVM PIR proposal, we show how OpenSHMEM one-sided communications can be optimized via our implementation of PIR into the LLVM compiler; we illustrate two important optimizations for such operations using loop tiling and communication vectorization.

[1]  Dhabaleswar K. Panda,et al.  Supporting Hybrid MPI and OpenSHMEM over InfiniBand: Design and Performance Evaluation , 2012, 2012 41st International Conference on Parallel Processing.

[2]  Vivek Sarkar,et al.  Phasers: a unified deadlock-free construct for collective and point-to-point synchronization , 2008, ICS '08.

[3]  Ken Kennedy,et al.  Compiling Fortran D for MIMD distributed-memory machines , 1992, CACM.

[4]  Mark N. Wegman,et al.  Efficiently computing static single assignment form and the control dependence graph , 1991, TOPL.

[5]  Christian Lengauer,et al.  Polly - Performing Polyhedral Optimizations on a Low-Level Intermediate Representation , 2012, Parallel Process. Lett..

[6]  Bradford L. Chamberlain,et al.  Parallel Programmability and the Chapel Language , 2007, Int. J. High Perform. Comput. Appl..

[7]  Robert W. Numrich,et al.  Co-array Fortran for parallel programming , 1998, FORF.

[8]  Jason Merrill Generic and gimple: A new tree represen-tation for entire functions , 2003 .

[9]  Vikram S. Adve,et al.  LLVM: a compilation framework for lifelong program analysis & transformation , 2004, International Symposium on Code Generation and Optimization, 2004. CGO 2004..

[10]  Barbara M. Chapman,et al.  Introducing OpenSHMEM: SHMEM for the PGAS community , 2010, PGAS '10.

[11]  Edsger W. Dijkstra,et al.  Cooperating sequential processes , 2002 .

[12]  D. Novillo OpenMP and automatic parallelization in GCC Diego , 2006 .

[13]  Pierre Jouvelot,et al.  SPIRE : A Methodology for Sequential to Parallel Intermediate Representation Extension , 2013, ParCo 2013.

[14]  Vivek Sarkar,et al.  Intermediate language extensions for parallelism , 2011, SPLASH Workshops.