Course Description

Graphical Processing Units (GPUs) include hundreds of small processing units, called pipelines, which makes them suitable for running parallel applications with great efficiency. GPUs are rapidly growing in performance and programmability offering application potential for time consuming computing problems.This course intends to provide knowledge and practical experience in developing applications with massively parallel computing resources. Students will be able to design, develop and optimize software on GPUs. NVIDIA processors and the CUDA programming tool will be used in the lab section of the course. A good knowledge of C programming is required, since all the programming will use environments building on C.

Course Objectives

  1. To provide awareness about GPUs and GPU programming

  2. To introduce CUDA for parallel computing on the Graphics Processing Unit (GPU)

  3. To introduce OpenCL    

  4. To introduce knowledge about parallel programming

Learning Outcomes

  1. Students will have a theoretical knowledge and practical experiences in CUDA for GPU computing

  2. Students will be able to solve and optimize time consuming computing problems on GPUs

  3. Students will have in-depth knowledge about parallel programming

  4. Students will be able to compare and contrast GPU programming environments

Teaching Policy

3 hours of lecturing per week. Attendance to laboratories is compulsory. 

C/C++ or Matlab programming background is essential. 


D. Kirk and W. Hwu

Programming Massively Parallel Processors

Morgan Kaufmann


J. Sanders and

E. Kandrot

CUDA by Example: An Introduction to General-Purpose GPU Programming