Topic outline

  • General

    Credits: This is a 1-credit class.

    Information: All classes, except for October 15th, are in MXC 315 at 10:15. On October 15th, the classroom is ME A3 31

    Schedule: The course is taught on Tuesdays and Fridays, from October 5th through October 26th from 10am-12am.

    Registration: Participants are free to attend the first lesson without prior registration. The enrollment key will be provided during the first lesson.

    Classroom: For now, the class room is MXC 315, but this might change in the future. If you miss a class, you should check on the Moodle page to make sure you didn't miss an announcement.

    Prior knowledge: Attending students should be familiar with the basics of high performance computing and possess basic programming skills.

    This course teaches the use of graphics processors (GPUs) for the execution of computational tasks in science, based on the CUDA programming language. The purpose is to give researchers means of achieving exceptional computational performance at a cost which is compatible with a typical lab budget. Compared to traditional processors (CPUs), graphics processors can gain as much as one or two orders of magnitude in computational performance, at an equal financial and energetic cost. The downside of using GPUs is however an increased complexity of the programming model. The course tries to overcome this burden by introducing a collection of algorithms and programming concepts for commonly encountered numerical tasks.

    The topics covered in the course are:
    - Short history of high-performance hardware, and basic concepts of GPUs.
    - The CUDA language and programming model.
    - Multi-GPU programming in shared-memory and distributed-memory environments.
    - Meta-programming of GPU applications with the Python scripting language.
    - Example applications for common computational tasks.
    - A detailed use case: fluid flow simulation with the lattice Boltzmann method.
    - Practical exercise sessions.
  • Topic 1

    Lesson 1: Tuesday October 5

    Teacher: Jonas Latt
    Classroom: MXC 315
    • Introduction
    • History of parallel and high-performance hardware
    • GPU, basic concepts
    • Memory hierarchies

  • Topic 2

    Lesson 2: Friday October 8

    Teacher: Francis Lapique
    Classroom: MXC 315

    • Programming model
    • GPU-CPU transfers
    • Warp divergence
    • Coalesced access

  • Topic 3

    Lesson 3: Tuesday October 12

    Teachers: Francis Lapique and Simone Melchionna
    Classroom: MXC 315

    • Introduction to parallelism, with the shared-memory and the distributed-memory approach
    • Multi-GPU programming: the shared-memory and the distributed-memory approach

  • Topic 4

    Lesson 4: Friday October 15

    Teacher: Jonas Latt
    Classroom: ME A3 31

    • Libraries for scientific CUDA: linear algebra and FFT
    • PyCUDA and meta-programming

  • Topic 5

    Lesson 5: Tuesday October 19

    Teacher: Simone Melchionna
    Classroom: MXC 315

    • Lattice Boltzmann: a full-featured example application

  • Topic 6

    Lesson 6: Tuesday October 26

    Teachers: Francis Lapique and Jonas Latt
    Classroom: MXC 315

    Hands-on programming exercises
  • Topic 7

    Lesson 7: Friday October 29

    Teachers: Francis Lapique and Jonas Latt
    Classroom: MXC 315

    Hands-on programming exercises.