Teacher(s)
Language
English
> French-friendly
> French-friendly
Main themes
For a long time, general-purpose CPUs focused on supporting efficiently a single thread of execution. Improvements in chip manufacturing allowed packing more transistors on the same surface of a silicon wafer, and run resulting CPUs at higher frequencies. Single-threaded applications would simply run faster with every new processor generation. This era is now over. The industry hit several limitations known as the power wall, the memory wall and the ILP wall. No longer able to vertically scale-up CPUs supporting a single thread of execution, chip manufacturers have started packing together multiple, simpler units of execution, or cores. Exploiting the power of multiple cores requires exploiting parallelism in applications using multiple threads. Writing concurrent code requires identifying and managing concurrency, and introducing the necessary synchronization for correctness. Writing scalable and performant concurrent code requires understanding this tradeoff between synchronization and parallelism and mastering efficient implementations of shared data structures and algorithms for concurrent execution. Finally, multicore CPUs employ a complex memory layout, and the assumption of uniform memory access times is no longer valid. Understanding the impact of non-uniform memory accesses (NUMA) is therefore important to write efficient code for multicore CPUs.
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.
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.
Learning outcomes
At the end of this learning unit, the student is able to : | |
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:
|
|
Content
This software engineering project consists of the development (analysis, design, implementation, validation, documentation, integration and deployment) of a realistic and non-trivial software application, if possible proposed by and with the participation of a real client, under semi-professional working conditions.
The topic of the application to be constructed is proposed by an industrial partner or a non-profit organization that participates in the organisation of this course.
Teams of 6 to 8 students (required to achieve such a large project), will collaborate, supervised by a project manager.
Weekly meetings will be held with the project manager (an assistant or tutor) to present the progress and difficulties encountered, to evaluate alternatives, and discuss the distribution and planning of the work among team members.
The application to be developed will most likely be a web application, but the choice of the programming language, the environment, the application framework, and the development tools will depend on the requirements of the project client.
The topic of the application to be constructed is proposed by an industrial partner or a non-profit organization that participates in the organisation of this course.
Teams of 6 to 8 students (required to achieve such a large project), will collaborate, supervised by a project manager.
Weekly meetings will be held with the project manager (an assistant or tutor) to present the progress and difficulties encountered, to evaluate alternatives, and discuss the distribution and planning of the work among team members.
The application to be developed will most likely be a web application, but the choice of the programming language, the environment, the application framework, and the development tools will depend on the requirements of the project client.
Teaching methods
The course is based on the complete development (analysis, design, implementation, validation, documentation, integration and deployment) of large-scale software for a potential client, in teams of 6 to 8 students, supervised by a project leader.
Weekly meetings will be held with the project leader to follow up the work, plan tasks and monitor the progress of the project. Various prototypes and technical reports will be produced over the course of the semester.
Particular attention will be paid to the responsible use of generative artificial intelligence tools:
Weekly meetings will be held with the project leader to follow up the work, plan tasks and monitor the progress of the project. Various prototypes and technical reports will be produced over the course of the semester.
Particular attention will be paid to the responsible use of generative artificial intelligence tools:
- They can only be used as tools to support reflection in the initial analysis phase, for example to stimulate brainstorming and initiate discussions on the identification of needs and requirements.
- On the other hand, they may not be used to produce code (implementation and testing) or to generate design artefacts.
- This rule, which will be strictly applied, aims to preserve the authenticity of the students' software engineering work, while allowing them to critically explore the role of emerging technologies in the software development process.
Evaluation methods
Assessment of the course will be based on :
Important note: The active and balanced participation of each student is expected in all aspects of the project:
Reminder: Failure to comply with the rules concerning the use of generative AI (see Teaching methods) may result in penalties up to and including the attribution of a mark of 0 for the student or group of students involved in the activity concerned.
- Individual, continuous, active and balanced participation in group work and weekly meetings with course assistants/tutors;
- The completion of two to three intermediate prototypes, accompanied by their corresponding technical reports;
- The final report, the delivered system and its documentation, as well as the presentation and demonstration of the final product to the customer or an intermediary;
- The integration of the solutions from the various groups into a complete product.
Important note: The active and balanced participation of each student is expected in all aspects of the project:
- analysis and design,
- development (implementation and testing),
- integration,
- documentation (reports and demonstration).
Reminder: Failure to comply with the rules concerning the use of generative AI (see Teaching methods) may result in penalties up to and including the attribution of a mark of 0 for the student or group of students involved in the activity concerned.
Other information
Prerequisites:
- Have good knowledge of and experience with the concepts of object-oriented programming, algorithms and data structures.
- Have participated in the development of a small to medium-sized software system.
Online resources
Bibliography
French
Des lectures supplémentaires seront suggérées dans le plan de cours qui décrit les produits livrables et l'organisation du projet. Les supports de cours pertinents, des slides et des informations pratiques seront accessibles sur Moodle, qui sera également le principal moyen de communication entre l'enseignant et les étudiants.
English Additional reading material will be suggested in the course plan which describes the deliverables and organisation of the project. All relevant course material, slides and practical information will be available on Moodle, which will also be the main means of communication between the teacher and the students.
Des lectures supplémentaires seront suggérées dans le plan de cours qui décrit les produits livrables et l'organisation du projet. Les supports de cours pertinents, des slides et des informations pratiques seront accessibles sur Moodle, qui sera également le principal moyen de communication entre l'enseignant et les étudiants.
English Additional reading material will be suggested in the course plan which describes the deliverables and organisation of the project. All relevant course material, slides and practical information will be available on Moodle, which will also be the main means of communication between the teacher and the students.
Faculty or entity