Sven Verdoolaege presented the lecture PPCG and Pencil compiler design at the Polyhedral Code Optimizations and Numerical Simulation spring school.
This course presents an overview of the inner workings of the polyhedral parallelizing compiler PPCG, which takes PENCIL code as input and produces either CUDA or OpenCL code. PENCIL is a subset of C99 with some extra builtins and pragmas that allow the user to express additional information that can be used by PPCG to produce better code. Some of the most prominent PENCIL features are described, along with their effect on PPCG. All the major steps of PPCG are covered, with a special focus on the choice of the core scheduling algorithm and its potential pitfalls.
Michael Kruse presented Using PPCG in Practice by Means of the pencilcc Wrapper
pencilcc is a compiler for PENCIL source code (similar to nvcc or mpicc) that uses PPCG under the hood, but that simplifies the user experience. PENCIL is a subset of C99 designed to facilitate automatic parallelization. The pencilcc compiler also comes with a pencil.h header and a runtime library called PRL. In this session we will learn how to compile PENCIL sources using pencilcc to OpenCL/CUDA and how to profile our code. We will also see the influence of PENCIL-specific annotations on the generated code as well as the positive effect on performance of using the PRL library.