You are here: Home » Study Plan » Subject



master degree course in COMPUTER SCIENCE

Course year 1
Teaching units Unit High Performance Computing
Information Technology (lesson)
  • TAF: Compulsory subjects, characteristic of the class SSD: ING-INF/05 CFU: 9
Teachers: Alessandro CAPOTONDI, Andrea MARONGIU
Moodle portal
Exam type oral
Evaluation final vote
Teaching language Italiano
Contents download pdf download


Alessandro CAPOTONDI


The aims of this course are:

- to illustrate the main characteristics and architectures for high-performance computing systems, both from the embedded and high-end domains: multi-/many-core, GPU, FPGA.

- introduce the main problematics of parallel programming and the methodologies for program decomposition.

- introduce the main advanced parallel programming techniques using OpenMP and CUDA.

- introduce the key concepts of the High-Level Synthesis design methodology for FPGA-based systems.

Admission requirements

To fully appreciate and benefit from the course content, it is recommended that students possess the following:
- Fundamental understanding of computer architectures, memory hierarchies, and metrics used for measuring computational performance.
- Basic knowledge of imperative and object-oriented programming, particularly in C/C++.
- Foundational understanding of operating systems and their principles.

These prerequisites will enhance the student's experience and comprehension of the course materials.

Course contents

Parallel architectures (14h):
- Evolution of computer systems into heterogeneous and parallel architectures;
- Taxonomy of multicores. Shared memory VS distributed memory systems. Homogeneous VS Heterogeneous systems;
- Novel challenges: Coherency, synchronization and consistency in shared-memory systems;
- The architecture of modern multicore CPUs, General-Purpose Graphics Processing Units (GP-GPU) and Field Programmable Based Arrays (FPGA);

Design of Parallel code (6h):
- Performance in multicores: coverage, granularity, locality;
- Parallel design patterns: architecting parallel software;
- Software analysis and profiling;
- Introducing programming models for massively parallel heterogeneous systems;

Parallel programming models (15h):
- Shared memory systems programming with OpenMP;
- Programming GPU-based heterogeneous systems: CUDA;
- High-Level Synthesis for FPGA acceleration;

Laboratory Exercises (28h)
- Laboratory Exerciseson OpenMP;
- Laboratory Exerciseson CUDA;
- Laboratory Exerciseson HLS;

Teaching methods

All lecture hours will be conducted in ENGLISH. Lectures are primarily based on slides for the theory; laboratory exercises will also be adopted for the use of the various programming models. Students will have a virtual lab accessible 24/7 for independent practice.

Assessment methods

Six exam appeals are guaranteed during the academic year to test learning. The examination consists of three parts, a THEORETICAL Assessment, a PRACTICAL Assessment, and an ORAL. - THEORETICAL Assessment, usually conducted in written form lasting about an hour and a half, involves single- and multiple-choice questions designed to assess knowledge of the theoretical topics covered in class, plus exercises or open-ended questions designed to assess understanding of the more practical aspects of the course. Consultation of lecture materials and textbooks is NOT allowed during the test. THEORETICAL Assessment may be oral in case fewer than five students are enrolled. - PRACTICAL Assessment aims to evaluate knowledge and skills using the programming models presented during the course. For attending students, PRACTICAL assessment can be carried out through the presentation of 3 assignments to be carried out in groups during the class (in groups) and a short individual oral to be carried out in the exam discussion of these activities carried out. For those who do not participate in the group activities, the practical assessment is conducted through oral, where the ability to use the programming techniques presented during the course is assessed through practical exercises. - ORAL, aimed at further evaluation of knowledge of all theoretical and practical aspects of the course, and is based on the outcome of the written test (typically, a barely sufficient written test requires a more thorough oral than an excellent written test. A poorly answered question or exercise from the written test identifies a possible point of further study in the oral examination). Evidence is graded quantitatively with a grade in thirtieths (plus possible honors) based on: - The student's degree of knowledge of the subject matter. - The practical skills in using the programming models presented. - The ability to analyze and solve practical problems of parallelization of algorithms through the re-elaboration of the knowledge learned in the course. The final grade is given by the arithmetic mean of the three tests (however, it is necessary to be SUFFICIENT in all three tests to pass the exam).

Learning outcomes

- Knowledge and understanding:
the student will be able to develop parallel software suitable for facing scientific calculation problems on multiprocessor architectures.
- Ability to apply knowledge and understanding:
the student will have sufficient knowledge to deal with the resolution of some scientific calculation problems coming from complex computer applications on parallel systems.
- Making judgments:
the student will possess the necessary ability to identify the architectures, programming environments and algorithms appropriate to a parallel resolution of a specific scientific computing problem.
- Communication skills:
the student will be able to clearly explain the main characteristics of the parallel algorithms studied and discuss their applicability in practical contexts.
- Learning skills:
the student will be able to study in depth the main aspects of the topics proposed in the course.


I materiali didattici consistono principalmente nelle slides presentate a lezione, all'interno delle quali sono presenti link per l'approfondimento.

Tutti i materiali sono reperibili all'interno della pagina Moodle del corso (