Parallel and GPU Programming in Python @SURFsara

VK1/VK2 (SURFsara)



Science Park 140, 1098 XG Amsterdam

Scope of the course

The Python programming language has become more and more popular among researchers for its simplicity and the availability of specific programming libraries, and at the same time the correct exploitation of heterogeneous architectures presents challenges for the development of parallel applications. In order to bring these two topics together, this course is focused on the use of Python on CPU and GPU platforms for scientific computing in general.


General description

The basic concepts of good programming practices in Python and general parallel programming will be introduced, and then GPU computing will be explained combining the essential theory concepts with hands-on sessions. The proposed exercises will be tested in the supercomputing facilities provided by SURFsara using Python with different programming libraries:



If the course gets fully booked, no more registrations are accepted through this website. However, you can be included in the waiting list: for that, please send an email to and you'll be informed when a place becomes available.

Parallel and GPU Programming in Python @SURFsara
  • Monday, 3 February
    • 09:30 09:45
      Welcome & Introduction
    • 09:45 11:00
      Introduction to efficient shared memory programming

      This lecture focuses on issues like parallelism and concurrency and dives a little bit into compiler theory by explaining concepts like just in time and ahead of time compilation in the context of a interpreted language (Python).

    • 11:00 11:15
      Coffee break 15m
    • 11:15 12:30
      Hands-on: Introduction to efficient Python CPU programming

      This tutorial will teach how to apply certain theoretical concepts in Python by using the subprocess, multiprocessing, concurrent.futures, and asyncio libraries. Additionally, two examples are introduced illustrating the aot and jit concepts.

    • 12:30 13:30
      Lunch 1h
    • 13:30 14:15
      Shared Memory Programming in Python: Numba, Cython and OpenMP

      The lecture is focused on introducing the three programming paradigms and contains Python code samples illustrating key concepts and performance.

    • 14:15 15:45
      Distributed memory programming with mpi4py

      Handson for the Numba, Cython, OpenMP lecture

    • 15:45 16:00
      Coffee break 15m
    • 16:00 17:00
      Hands-on: distributed memory programming with mpi4py
  • Tuesday, 4 February
    • 09:30 11:00
      Introduction to the GPU ecosystem
    • 11:00 11:15
      Coffee break 15m
    • 11:15 12:00
      Hands-on: Programming GPUs with Numba
    • 12:00 13:00
      Lunch 1h
    • 13:00 13:45
      Hands-on: Programming GPUs with Numba (continued)
    • 13:45 15:15
      Hands-on: Programming GPUs with PyCUDA
    • 15:15 15:30
      Coffee break 15m
    • 15:30 16:30
      Advanced topics with GPUs