Scheda programma d'esame
Anno accademico2020/21
PeriodoSecondo semestre

Programma non disponibile nella lingua selezionata
Learning outcomes

The course aims at providing a mix of foundations and advanced knowledge in the field of parallel computing specifically targeting data intensive applications. A first part of the course will provide the necessary background related to the parallel hardware, from multicore to accelerators up to distributed systems such as clusters and cloud. Then the principles of parallel computing will be addressed, including measures characterizing parallel computations, mechanisms and policies supporting parallel computing and typical data intensive patterns. Eventually a survey of existing programming frameworks will be included, aimed at preparing the students to use and exploit the more modern and advanced framework currently used in both research and production institutions. As a result, the student attending the course will be given a general perspective of the parallel computing area as well as a comprehensive survey of the currently available frameworks for data intensive computing. The whole set of arguments will be complemented with practical exercises, in class—according to the bring your own device principle—or as homework assignments. The correct and timely production of assignment solutions will constitute the final written essay needed to access the oral part of the exams. The student may choose to prepare a more consistent final project as substitute of the assignment exercises. The different programming frameworks used in the course will be introduced detailing the main features and usage patterns, leaving to the student the task of learning the low level syntactic details (under the supervision of the professors) as part of the homework assignments.

The student successfully completing the course will be able to design and implement parallel applications/run time supports efficiently using/implementing common and useful parallel design patterns using both structured and more classical parallel programming frameworks. In particular, the student will be able to evaluate different, alternative parallelisation strategies and techniques by exploiting proper abstract and concrete parallel pattern performance models and to implement the different parallelisation strategies with state of the art parallel programming tools.

Assessment criteria of knowledge

Proper instruction of the student will be verified through two different ways: 

  • continuons evaluation of short programming assignments
  • final exam

During the course compact assignments will be given (with deadlines). The student succesfully completing all the assignments will be able to seamlessly complete the final project assignment.

The final exam consists in a project (assigned before the end of the lessons and valid for the whole academic year) and an oral exam, including the discussion of the project.

The project that has to be implemented using one of the frameworks presented during the lessons and validated through experiments run on the parallel/distributed hardware provided. 

The oral exam will start with a discussion of the project results and will conclude with questions related to the material presented during the lessons. 

The student should demonstrate his/her ability in the implementation of simple parallel application or simple run time supports for structured parallel patterns through the implementation of a project assigned right before the end of the course lessons. During the oral exam, the student should demonstrate his/her ability to make limited modification to the project code and to demonstrate project code functionality and performance. During the oral exam, the student should demonstrate to have acquired suitable knowledge relatively to the course main topics and to be able to apply the techniques and methodologies covered in the course material to common parallel programming scenarios.


  • Final oral exam
  • Final laboratory practical demonstration
  • Laboratory practical
  • Written report


Further information:
50% lab project 50% oral exam


The student will eventually be able to design, develop and tune parallel and distributed applications using several state-of-the-art programming frameworks for shared memory and distributed memory architectures, mainly based on C/C++ and/or scripting languages or DSLs.

Assessment criteria of skills

Homework programming exercises are assigned during the course and part of the exam consist in the preparation of a small project, to be designed, developed and tested on the computing resources available for the course support. 


Students will be educated to individual contribution to existing sfotware projects. 

Assessment criteria of behaviors

Part of the assignments and of the final project may be related to proper usageof and interaction with existing software tools. 


Basic programmig ability is required in C/C++ and/or Java. 

Teaching methods

Delivery: face to face, with the support of computer based tools (software blackboard, audio/video of lessons available through web)

Learning activities:

  • attending lectures
  • individual study
  • Laboratory work
  • Practical

Attendance: Not mandatory

Teaching methods:

  • Lectures
  • laboratory (bring you own device model)
  • project work

Delivery: face to face

Attendance: Not mandatory



The main course deals with a set of arguments related to the programming models targeting parallel and/or distributed architectures. The common background of these arguments is represented by structured parallel programming models, such as those based on algorithmic skeletons or on parallel design patterns. More in detail, the course covers:

  • Parallel and distributed programming principles,
  • Structured parallel/distributed programming patterns (data and stream parallel),
  • Parallel/distributed pattern implementation techniques for multi/many cores and cluster/networks of workstations,
  • Parallel/distributed patterns refactoring,
  • Autonomic management of non functional features.
  • Analytical, concrete and abstract performance models for parallel/distributed patterns,
  • Implementation of parallel/distributed patterns with state of the art parallel programming frameworks.
  • Concise introduction to the usage of GPU accelerators
  • Concise introduction to the usage of data intensive parallel programming frameworks 



Recommended reading includes:

  • "SPM Course notes", by M. Danelutto, PDF available at (about 300 pages, covers all the lesson and lab material)
  • "Structured Parallel Programming (Patterns for Efficient Computation)” by M. McCool, A. D. Robinson, J. Reinders, Morgan Kaupfmann 2012 Further bibliography will be indicated, if needed, on the course web site.
  • Manuals and tutorials avaialable online relative to the programming frameworks presented and used in the different parts of the course


Non-attending students info

Students that do not attend the course may use the audio/video records of the lessons available online immediately after the end of the lessons and should also try to solve the homework assigmnents, avaialable on the web course platform. 

Assessment methods

The exam requires the implementation of a small project and an oral exam. The latter includes a demo of the project, discussion of the project features and performances and general questions relative to the subjects of the course. 

Ultimo aggiornamento 28/07/2020 10:47