- Algorithms and data structures (LINFO1103 & LINFO1121)
- Performance measurements (LFSAB1402)
- Language constructs for concurrent programming (LINFO1131)
- Shared memory objects and synchronization
- Performance and Scalability
- Hardware support for synchronization
- Consistency and progress
- Obstruction-free, wait-free and lock-free shared data structures
- Searching, sorting and counting with multiple cores
- Non-Uniform Memory Access (NUMA) and impact on performance
- Optimistic execution and transactional memory
At the end of this learning unit, the student is able to : | |
1 | Given the learning outcomes of the "Master in Computer Science and Engineering" program, this course contributes to the development, acquisition and evaluation of the following learning outcomes:
Given the learning outcomes of the "Master [120] in Computer Science" program, this course contributes to the development, acquisition and evaluation of the following learning outcomes:
Given the learning outcomes of the "Master [60] in Computer Science" program, this course contributes to the development, acquisition and evaluation of the following learning outcomes:
At the outcome of this course, the students will have acquired the necessary competences to build a large-scale software system under semi-professional working conditions. More specifically, students having completing this course with success will be able to:
|
The contribution of this Teaching Unit to the development and command of the skills and learning outcomes of the programme(s) can be accessed at the end of this sheet, in the section entitled “Programmes/courses offering this Teaching Unit”.
This course will provide students with the necessary tools and knowledge to write efficient and scalable code for modern multicore CPUs. It will detail the mechanisms available for synchronization, starting from the implementation of language constructs such as locks, monitors or condition variables, to the direct uses of CPU-provided synchronization primitives (e.g. compare-and-swap) to build efficient and scalable data structures. It will emphasize the performance aspects of multicore programming: the impact of synchronization primitives, the impact of non-uniform memory access, and the impact of multiple-level memory hierarchies. It will finally offer an opening to the future of multicore programming with an introduction to transactional memory and to the support for speculative execution in modern CPUs (e.g. Intel Haswell), and discuss the execution model for concurrent code running on GPUs.
- Courses and exercises
- Practical sessions, rated
- Final exam
- Projets (40% de la note finale)
- Examen (60% de la note finale)
- Algorithms and data structures (LINFO1103 & LINFO1121)
- Performance measurements (LFSAB1402)
- Language constructs for concurrent programming (LINFO1131)
- Slides fournis en classe et en ligne (Moodle)
- Exercices sur Moodle
- Questionnaire d'auto-évaluation hebdomadaire sur Moodle
- The Art of Multiprocessor Programming, Maurice Herlihy and Nir Shavit, Morgan Kaufmann. ISBN 978-0-12-370591-4. UCL library reference 10.620.426
- Documents de recherche (pour la partie NUMA)