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.
Proper instruction of the student will be verified through two different ways:
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.
Methods:
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.
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)
Learning activities:
Attendance: Not mandatory
Teaching methods:
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:
Recommended reading includes:
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.