This course mainly focuses on parallel programming techniques and parallel pattern design aiming at developing applications on many-core architectures, such as the GPU (Graphics Processing Units) devices, widely used in high performance computing.
Expected learning outcomes
Students will be able to develop and deploy applications on CPU-GPU hybrid systems, which means to be skilled at: - structuring the logic design in order to identify subtasks than can be actually parallelized - analyzing in a critical way the hw resources required by the different levels of concurrency - understanding the performance evaluation and optimization process
- Introduction to heterogeneous system architecture based on CPU and GPU - The general purpose GPU programming (GPGPU) concept - Parallel architecture - The CUDA programming model - The CUDA execution model - The CUDA memory model - Stream, concurrency and performance optimization - GPU-accelerated CUDA libraries - Multi-GPU programming - Parallel design patterns - Application development on NVIDIA GPUs
Prerequisites for admission
Good programming practice and basic knowledge of the ANSI C language.
The course consists of lectures and practical classes based on CUDA C programming.
The lecture slides, the suggested books and the technical documents are available on the course page: http://gpu.di.unimi.it.
Assessment methods and Criteria
The examination consists of two parts: 1. a written test based on the lecture subjects (70% of final grade) 2. a project based on the CUDA C programming language (30% of final grade)