Programming Models @ BSC

Boosting parallel computing research since 1989

Heterogeneous Parallel Programming with OmpSs (at PACT 2018, Cyprus)

- Written by Xavier Teruel

  • Place: Limassol, CYPRUS
  • Event date: November 4th, 2018 (associated to PACT 2018)
  • Speakers: Xavier Martorell


OmpSs is a task-based programming model developed at BSC that we use as a forerunner for OpenMP. Like OpenMP, it is based on compiler directives. It is the base platform where we have developed OpenMP tasking, support for dependences, priorities, task reductions, support for heterogeneous devices, and our last addition is the support for application acceleration on FPGAs.

In this tutorial we are going to learn how to program using OmpSs, and its heterogeneous architectures support. We will introduce the OmpSs basic concepts related to task-based parallelism for the SMP cores and then quickly move to the support for heterogeneous devices. OmpSs supports offloading tasks to a variety of accelerators, including CUDA and OpenCL GPUs, and also FPGAs using High-Level Synthesis (HLS) from vendors. OmpSs facilitates programming because it leverages existing OpenCL and CUDA kernels without the burden to have to deal with data copies to/from the devices. Data copies are just triggered automatically by the OmpSs runtime, based on the task data dependence annotations. On the FPGAs environment with HLS, plain C/C++ applications with the OmpSs annotations offload kernels to the FPGA.

OmpSs for FPGA devices is the result of our work at the AXIOM, EuroEXA and Legato European Projects. We will also show how the same directives are being used to outline code that can be compiled, run on FPGA devices, and analyzed with the BSC analysis tool Paraver thanks to the internal FPGA tracing facilities.

The tutorial will include two laboratory sessions. We will provide student accounts to attendees in our Minotauro machine (Intel-based with NVidia GPUs), and several exercises will be provided to be completed online (cholesky, matrix multiplication, nbody, 3d-stencil, merge-sort, histogram…), and learn better the details of the OmpSs support for both the SMP and heterogeneous architectures.