Parallel programming was once a niche field reserved only for government labs, research universities, and certain forward-looking industries, but today it is a requirement for most applications.
Up to 2006, CPU designers in fact have achieved performance gains improving clock speed, execution optimization and cache size. But now the performance improvement in new chips is fueled by hyperthreading, multicore and cache size. Hyperthreading and multicore CPUs have nearly no positive impact on most current software because it has been designed in a sequential fashion.
Therefore, the performance lunch isn’t free any more. Now is the time to analyse applications to identyfy the CPU-sensitive operations that could benefit from parallel computing.
The aim of this course is to provide an introduction on the architecture of parallel processing systems along with programming paradigms (openMP, MPI and CUDA) essential for exploitng them.
Learning the main aspects of modern, heterogeneous high-performance computing systems (e.g. pipeline/superscalar processors, accelerators as GPUs, shared-memory systems, clusters, supercomputers) and basic programming skills for high-performance computing, i.e. the proper use of the cache and vectorization, OpenMP, MPI, and CUDA.
At the end of the course the student will be able to
Basic knowledge of computer architecture, fair programming skills in C/C++ or Fortran.
Lessons, practicals and a final project.
Topics 4,5 and 8 are for students attending the 9 credits course.
Slides, tutorials, and code samples provided during the course.
Ricevimento: By appointment, in presence or via TEAMS.
DANIELE D'AGOSTINO (President)
ANNALISA BARLA
GIORGIO DELZANNO (President Substitute)
NICOLETTA NOCETI (Substitute)
According to the calendar approved by the Degree Program Board: https://corsi.unige.it/en/corsi/10852/studenti-orario
The timetable for this course is available here: EasyAcademy
The exam consists of a written test on the key theoretical topics presented in the course, plus the discussion of a project made individually or in a small group (2-3 students).
For 6 credits, the project will consist of the parallelization of a sequential algorithm using openMP and CUDA.
For 9 credits, the project will consist of the parallelization of a sequential algorithm using openMP, MPI+openMP and CUDA.
Guidelines for students with certified Specific Learning Disorders, disabilities, or other special educational needs are available at https://corsi.unige.it/en/corsi/10852/studenti-disabilita-dsa
The written exam will focus on the effective acquisition of theoretical concepts presented in the first part of the course. It will be composed of a quiz with open and closed questions. It represents 40% of the final mark.
The project will be evaluated not only on the basis of the achievable performance of the parallel code, but also on how the code analysis, the adopted parallelization strategies, and the achieved performance have been presented and discussed.
This means, for example, that the parallel concepts are properly used, results are presented in a suitable and meaningful way, and overheads and issues have been correctly identified and discussed. It represents 60% of the final mark.
For further information, please refer to the course’s AulaWeb module or contact the instructor.