(DISTRIBUTED SYSTEMS: PARADIGMS AND MODELS)
CdSINFORMATICA E NETWORKING
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.
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 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.
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.
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.
Delivery: face to face, with the support of computer based tools (software blackboard, audio/video of lessons available through web)
- attending lectures
- individual study
- Laboratory work
Attendance: Not mandatory
- laboratory (bring you own device model)
- project work
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.
Recommended reading includes:
- "SPM Course notes", by M. Danelutto, PDF available at http://didawiki.cli.di.unipi.it/doku.php/magistraleinformaticanetworking/spm/sdpm13 (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
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.
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.