- To provide students with a deep, critical and systematic understanding of key issues and effective solutions for parallel programming for systems with multi-core processors.
- To develop students appreciation of a variety of approaches to parallel programming, including using a low level raw thread model and a high level task-based programming.
- To develop the students skills in parallel programming using Intel Threading Building Block library.
- Introduction to multi-core processors and architectures: opportunities adn challenges (2 lectures);
- Introduction to C++ programming: generic programming with Standard Template Library (STL) (3 lectures);
- Elements of parallel programming: decomposition; scaling and speedup; threads; synchronization (5 lectures);
- Interfaces for parallel programming: raw threads; OpenMP; Intel's Threading Building Block library (4 lectures);
- Task-based prorgramming with TBB: basic algorithms; task scheduler; task recurrence patterns; generic task-based programming; combining with other threading packages (7 lectures);
- Performance and scalability evaluation and testing (3 lectures).
- J. Reinders: Intel Threading Building Blocks: Outfitting C++ for Multi-core Processor Parallelism. O'Reilly (latest edition).
- Walter J. Savitch: Absolute C++ . Pearson/Addison-Wesley (latest edition).
At the end of the module students should be able to:
- explain the concepts of multi-core processors and systems, their advantages and challenges of their programming.
- appraise the differences between various programming techniques and programming patterns available for parallel programming for multi-core systems.
- design parallel multi-threaded programs using the most appropriate for a particular application approach, either using low level raw thread model, or a high level task-based programming.
- design and implement reasonably sophisticated parallel multi-threaded programs demonstrating reasonable scalability on multi-core systems using Intel Threading Bulidng Blocks library.
- analyse and evaluate the efficiency and scalability of parallel multi-threaded programs for multi-core systems.
Formal lectures : In a typical week, students will be expected to attend two to three hours of formal lectures per week. In the lectures the main concepts and methods covered by the module will be introduced.
Pacticals/Tutorials: Students will be expected to attend one to two hours of supervised tutorials/computer lab practicals, which would allow students to perform practical exercises. The tutorial/lab exercises will focus on the design, implementation and analysis of parallel programs using approaches disscussed in the lectures. Whenever appropriate the remotely accessible Intel's Manycore Testing Lab will be used for testing and scalability analysis of proposed solutions.
Private study: In atypical week students will be expected to devote 9 hours of unsupervised time to private study. Private study will provide time for reflection and consideration of lecture material, background reading and completion of the assessment tasks.
Assessment: Continuous assessment, consisting of programming assignments that will necessitate the development of parallel programs running on multicore systems and analysis of their efficiency and scalability, will be used to test to what extent practical skills have been learnt. A written examination at the end of the module will assess the academic achievement of students.