8:45 - Registration opens
9:00 - Welcome
9:10 - High-level portable programming of heterogeneous systems using SkePU
Christoph Kessler and August Ernstsson, Linköping University
Abstract: Today's computer systems are increasingly heterogeneous and parallel, and expose different (often, low-level) programming models to the user, such as pthreads, OpenCL, CUDA or MPI. While this allows the (technically skilled) programmer to better exploit the performance potential of a given heterogeneous system, it leads to problems in programmability as well as in code and performance portability when migrating to new heterogeneous systems and configurations.
As a high-level approach to portable multi-/manycore computing, we present SkePU, a C++ based high-level portable programming framework that provides a simple and unified programming interface for specifying computations with the help of so-called (algorithmic) skeletons. Skeletons are pre-defined generic software building blocks derived from higher-order functions such as map, farm, scan, stencil and reduce, which can be parameterized in problem-specific user code and which implement certain frequently occurring patterns of control and data flow for which efficient target-specific implementations may exist. The SkePU skeletons have multiple implementations targeting different platforms including multi-core CPU, GPU and multi-GPU systems and clusters, and can automatically learn from sample executions to automatically switch to the expected fastest implementation.
SkePU also provides STL-based data-containers that abstract from the memory hierarchy and distribution, and that dynamically optimize memory management, communication and access locality.
SkePU is open-source, relatively easy to install, and is being actively used in both research and in teaching parallel programming classes.
In this tutorial we introduce SkePU, including some of its more technical aspects, and demonstrate how high-level portable programs can be written in SkePU and deployed. We also provide a guided hands-on programming exercise for participants and help with the installation process where necessary (a binary distribution for x86 Linux will be provided for quick installation). Participants are encouraged to bring their laptop if doing the programming exercise.
10:40 - Coffee break
11:00 - Session 1: Task-based programming
12:00 - Lunch
13:15 - Session 2: Memory systems
14:00 - Session 3: Industrial and invited session
15:30 - Coffee break
15:50 - Session 4: Energy and performance
16:50 - Closing remarks