Seminar: Parallel Simulations on GPUs

General Information

  • Offered by: UMTL (Chair of Prof. Dr. Antonio Krüger)
  • Lecturers: Marcel Koester, Julian Gross, Thomas Schmeyer
  • Location: Due to the COVID-19 crisis the seminar will take place online-only
  • Time: Fridays 14:00-16:00 
  • Credit Points: 7
  • Language: English
  • Places:16

The processing/compute capabilities of modern GPUs easily outperform traditional CPU-based processing units. This trend has been evident in recent years and is continuing. In this practical seminar, you will learn the fundamentals of modern GPU programming and how to develop parallel simulations that run in realtime (FPS >= 60) while still being able to process millions of data elements. Furthermore, you will learn that your favorite text book algorithm does not scale on a GPU and needs refinement in order to achieve at least reasonable scaling behavior. Besides paper research and presentations, you will also build a small N-Body gravity simulation designed and optimized for GPUs in small teams.

Important dates

DateDescription
 16.04.2021 Kickoff meeting 
   

Team building

The seminar is designed for teams of two (!) no more, no less. Your task as a team is to dive into the dark matter of GPU programming via your assigned/selected topic, to present the topic in 60min (30min each) and to work on the practical project. Furthermore, you will have to give a 30min (15min + 15min) final presentation about your project with a specific focus on your topic you had been assigned to.

You will

  • learn how to conceptually program a GPU and why GPUs are fundamentally different from other processing Units.
  • learn the differences between Cuda, OpenCL and ILGPU.
  • learn how to write portable GPU programs using C# and ILGPU.
  • learn how to write basic parallel simulations using a practical project.

Topics

  • GPU Fundamentals and Compute capabilities
  • Kernels and Grouping with Cuda/OpenCL/ILGPU
  • N-Body simulations on GPUs
  • Tree based neighbor search
  • Prefix Sums
  • Radix Sort
  • Neighbor Models and Atomics
  • FENNS

Grading

  • Topic presentation: 30%
  • Practical project: 50%
  • Final presentation: 20%

Passing the Seminar

Since each category will be graded individually, it is sufficient to get 50% in each category. Please note that you have to pass each category separately.

Attendance and Submissions

All meetings must be attended by all group members (exceptions require an official document, e.g. a doctor’s certificate), otherwise, you won't pass the seminar. You have to hand in your state of the practical project each week. Submission deadline is every Friday 13:59 German time (CET).
The state and the progress of the practical project will be graded each week! (similar to hand in assignment sheets each week). We fight plagiarism in an aggressive way. If you share code between groups, only one group will get the points for the pratical project. The other group(s) will receive 0 points for the submission.

Requirements 

Note that you do not need a physical GPU device to attend and pass the seminar. We provide a software simulator and a hardware evaluation machine.

You should have passed the basic Programming 2 lecture, the Software Praktikum, Concurrent Programming (Nebenläufige Programmierung), and Mathematics for Computer Scientists 1+2 (or Analysis 1 and Lineare Algebra 1). Passing the Software Engineering core lecture is a plus. You are expected to program a C-like language fluently! You won't have a chance to pass this seminar otherwise.

Note that we will use C# in this seminar, which you are expected to get some knowledge *before* the seminar starts. It is similar to Java and C++ but combines many advantages of both languages. Furthermore, we will use ILGPU to develop all GPU programs. Feel free to browse the webpage and the sample to get some early insights.