Scheda programma d'esame
PROGRAMMING TOOLS FOR PARALLEL AND DISTRIBUTED SYSTEMS
MASSIMO COPPOLA
Academic year2016/17
CourseCOMPUTER SCIENCE AND NETWORKING
Code535AA
Credits6
PeriodSemester 2
LanguageEnglish

ModulesAreaTypeHoursTeacher(s)
STRUMENTI DI PROGRAMMAZIONE PER SISTEMI PARALLELI E DISTRIBUITIINF/01LEZIONI48
MASSIMO COPPOLA unimap
Learning outcomes
Knowledge

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 report and final oral exam.
Skills

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.
Prerequisites

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

The course requires 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.

Co-requisites

Courses with related content that can usefully be learned in parallel with this one include those about

  • parallel algorithms,
  • distributed computing,
  • data mining and big data analysis,
  • service oriented architectures design and implementation.

None of them is mandatory.

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.

Syllabus
  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
Bibliography
  • 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.
Modalità d'esame
  • Progetto di progettazione, programmazione e test
  • Esame scritto  (relazione scritta sul progetto e l'attività di verifica)
  • Esame orale finale (include la discussione del progetto)
Assessment methods
  • Design, Coding project and testing
  • Final written examination (written report on project work and evaluation)
  • Final oral exam (including project discussion)
Updated: 19/05/2017 16:10