Scheda programma d'esame
Anno accademico2017/18
PeriodoSecondo semestre

Learning outcomes

The course deals with design, evaluation and utilization of programming tools and environments for parallel and distributed applications. The programming paradigms, and related cost models, concern high-performance stream- and data-parallel computations, distributed shared memory, adaptive and context-aware programming, high-performance event-based programming, real-time programming, programming of fault-tolerance strategies, and others. For these paradigms, static and dynamic tools are defined and their performances are evaluated through case studies in experimental and laboratory activites.

Assessment criteria of knowledge

Student knowledge is evaluated during the course thanks to

  • the hands-on activities in the lab time,
  • the exercises made at home
  • interaction during the lessons

and after the course

  • evaluation of the project code, of the project report and final oral exam.

The student will achieve

  • acquantaince with at least three different parallel/distributed programming environments, covering both shared-memory and distributed memory systems
  • practical experience of applying analytical behavioural models for parallel patterns and full programs with respect to performance, reliability, memory/power efficiency
  • practical experience of the full cycle of : problem analysis / parallel solution modeling and design / model-driven implementation / cross evaluation of implementation and analytical models via benchmarking and test results
  • critical and empirical reasoning when evaluating parallel programs to guide design and coding choices
Assessment criteria of skills
  • Hands-on activities during lab-time
  • "Homework" exercises
  • Through the final project: the project and the written report (describing the performed work, testing activities and evaluation) are discussed with the student as part of the final examination, focusing on the "a priori" modeling and implementation choices made by the student and its ability to evaluate them "a posteriori" based on empirical results.

The course requires at least good proficiency in C and C++ programming in order to exploit the programming frameworks presented.

The course requires some previous knowledge of parallel and distributed computing system architecture (shared and distributed memory parallel systems, multiprocessors and multi-core processors), of structured parallel programming / behavioural skeletons and the associated basic analytical models, at least with respect to performance.


Some of the course pre-requisites can also be satisfied as co-requisites by following the SPM course in the same semester. This specifically applies to the following
"knowledge of parallel and distributed computing system architecture (shared and distributed memory parallel systems, multiprocessors and multi-core processors), of structured parallel programming / behavioural skeletons and the associated basic analytical models, at least with respect to performance."

Teaching methods

Delivery: face to face

Learning activities:

  • attending lectures
  • studying reference texts/papers
  • attending lab time with hands-on activities
  • personal study and coding experience with the programming tools presented

Lesson Attendance: Not mandatory

Teaching methods:

  • Lectures
    Slide-based lessons are integrated with classical blackboard presentation of auxiliary and additional material wheter needed.
  • Lab-time with hands-on experience
    Hands-on Lab time with assigned tasks and support from the teacher
    Usually individual tasks, using the students' own devices, possibly in remote connection with specific parallel/distributed systems
  • Course site used for the distribution of studying material
    Slides, papers and book references, text of the exercises for the practical sessions are made available on the dokuwiki page maintained by the Department.
  • A final project is mandatory.

All teaching material is in the Eglish language.

  1. high-performance stream- and data-parallel computations,
  2. distributed shared memory,
  3. adaptive and context-aware programming,
  4. high-performance event-based programming,
  5. real-time programming,
  6. programming of fault-tolerance strategies,
  7. tools and environments
  8. run-time supports
  9. case studies
  • B. Wilkinson, M. Allen – Parallel Programming, 2nd edition. 2005, Prentice-Hall.
  • Michael Mc Cool, Arch D. Robinson and James Reinders – Structured Parallel Programming (patterns for Efficient Computation) 2012, Morgan Kaufmann.
  • Lesson slides, papers, exercises -- made available via the Department's dokuwiki course official page.
  • The MPI official standard, version 3.0  (as reference)

Additional material

  • James Reinders – Intel Threading Building Blocks 2007, O'Reilly Media.
Non-attending students info

The course web page lists slides and additional sources in the "course journal" sub-page.
Please contact the teacher when preparing the course, at least by email, in order to

  • receive announces and additional material that is occasionally sent by email
  • obtain login credential on the systems that are made available for homework and project work
  • define the goal and tools for your personal homework

It is also advised to contact the teacher to book a question-time meeting and discuss any issue that the student may experience.

Assessment methods
  • Project work comprising algorithm design, coding, testing and evaluating the code
  • Final written examination (written report on project work and evaluation)
  • Final oral exam (including project discussion)
Ultimo aggiornamento 23/05/2018 12:16