Parallel programming on GPU architecture

Academic Year 2024/2025 - Teacher: GIUSEPPE BILOTTA

Expected Learning Outcomes

Knowledge and understanding: acquire the fundamentals of massively parallel computing on modern hardware (GPU, multicore CPU, accelerators) based on the stream computing paradigm.

Applying knowledge and understanding: acquire the competence to apply the knowledge to the development of parallel computing software using the main frameworks (CUDA and OpenCL).

Making judgements: acquire che capacity to identify fundamental coding paradigms (embarrasingly parallel problems, reductions, scans) and the corresponding opportunities to paralelize them.

Communication skills: acquire che capacity to describe with proper language both the theoretical and practical aspects of parallel computing on modern architectures.

Learning skills: develop the ability to understand specialized texts on the topic.

Course Structure

The course is composed of both active and practical lectures, with real-time development of sample code for each topic discussed, to provide the students with the necessary familiarity with both the theoretical and practical aspects of the material. Lectures may be held using mixed or remote techniques if required by circumstances.

Required Prerequisites

Knowledge of the C programming language.

Detailed Course Content

  • History of graphic cards and GPGPU
  • GPGPU programming basics; introduction to CUDA and OpenCL
  • embarrassingly parallel programs in CUDA and OpenCL
  • Benchmarking, optimization and debugging
  • parallel primitives for reductions and scans; implementation in OpenCL and/or CUDA
  • multi-GPU essentials

Textbook Information

NVIDIA CUDA Programming Guide
OpenCL specification

Course Planning

 SubjectsText References
1Concetti generali della programmazione GPUNVIDIA CUDA Programming Guide
2Aspetti tecnici della programmazione OpenCLOpenCL specification