# FI:PV197 GPU Programming - Course Information

## PV197 GPU Programming

**Faculty of Informatics**

Autumn 2024

**Extent and Intensity**- 1/1/0. 2 credit(s) (plus extra credits for completion). Recommended Type of Completion: zk (examination). Other types of completion: k (colloquium).

Taught in person. **Teacher(s)**- doc. RNDr. Jiří Filipovič, Ph.D. (lecturer)

doc. RNDr. Petr Holub, Ph.D. (assistant)

RNDr. Jiří Matela, Ph.D. (assistant) **Guaranteed by**- doc. RNDr. Jiří Filipovič, Ph.D.

Department of Computer Systems and Communications – Faculty of Informatics

Supplier department: Department of Computer Systems and Communications – Faculty of Informatics **Prerequisites**- C/C++ programming (PB111, PB160, PB161, PB071, or similar), familiarity with CPU architecture, and parallelization of algorithms (IB109).
**Course Enrolment Limitations**- The course is also offered to the students of the fields other than those the course is directly associated with.
**fields of study / plans the course is directly associated with**- there are 34 fields of study the course is directly associated with, display
**Course objectives**- The goal of this course is to explain how to use GP GPU for general computation.
**Learning outcomes**- After the end of the course students should: describe the architecture, programming model and optimization for GPUs; explain GPU implementation of several broadly used algorithms; create GPUs implementation of given computational tasks; judge the suitability of given computational problem for GPU acceleration.
**Syllabus**- Introduction: motivation for GPU programming, GPU architecture, overview of parallelism model, basics of CUDA, first demonstration code
- GPU hardware and parallelism: detailed hardware description, synchronization, calculation on GPU -- rate of instruction processing, arithmetic precision, example of different approaches to matrix multiplication -- naive versus block-based
- Performance of GPUs: memory access optimization, instructions performance, an example of matrix transposition
- CUDA, tools and libraries: detailed description of CUDA API, compilation using nvcc, debugging, profiling, basic libraries, project assignment
- Optimization: general rules for algorithm design for GPU, revision of matrix multiplication, parallel reduction
- Parallelism in general: problem decomposition, dependence analysis, design analysis, parallel patterns
- Metrics of efficiency for GPU: parallel GPU and CPU usage, metrics for performance prediction of GPU code, demonstration using graphics algorithms, principles of performance measurement
- OpenCL: introduction to OpenCL, differences comparing to CUDA, exploiting OpenCL for hardware not accessible from CUDA
- Case studies 1: Calculation of force field of molecule, automatic optimization of memory-bound functions
- Case studies 2: Acceleration of image and video compression
- Case studies 3: LTL model checking acceleration
- Discussion of a project, presentation of best-achieved results, presentation of 3 best solutions by authors, final discussion

**Teaching methods**- Lectures, reading of recommended literature, solving and programming assignments.
**Assessment methods**- Scores for assignment solutions: 50% for the project, up to 30% bonus for the performance of the solution. Oral exam after all the lectures: 50%. In order to pass successfully, the score for the oral exam must be at least half of maximum.
**Language of instruction**- English
**Further comments (probably available only in Czech)**- The course is taught annually.

The course is taught: every week.

- Enrolment Statistics (recent)

- Permalink: https://is.muni.cz/course/fi/autumn2024/PV197