Taken in AY18/19 Sem 1 under Prof Cristina Carbunaru.
This module is an expository module to parallel computing and the various parallel architectures in use today. Many topics are covered, but with little depth in each topic. In the earlier part of the semester, threads and synchronization are covered, and this overlaps somewhat with CS2106. Different parallel programming models are discussed to give students an overview of the current state of parallel computing. OpenMP, MPI, and CUDA programming are covered (with a programming assignment in each of these paradigms). Basic overviews of memory consistency and network interconnections are also covered, but without any formal mathematical proofs.
This module is one of the most content-heavy computer science modules that I have taken (this means that lots of memory work and help sheet optimisation is required). However, it does not require any significant amount of algorithmic or mathematical knowledge — secondary school mathematics is sufficient.
There are two major programming assignments in this module. The first assignment requires the use of OpenMP and MPI, and the second assignment requires the use of CUDA. C and C++ are allowed for these assignments, and students are expected to know at least one of those languages (or learn them on their own). While C is sufficient for all assignments, using C++ is likely to reduce implementation difficulty as C++ is more high-level than C. These programming assignments may be done individually or with one other student, and there is no additional penalty for pair work.
There are weekly tutorials or labs (tutorials and labs share the same timeslot, and it usually alternates between tutorials and labs). Tutorials are useful for clarifying the concepts taught during the lectures. However, the tutorial questions may not be representative of the midterms or finals, so preparation by trying out past year exam papers is recommended.
Prof Carbunaru is a patient lecturer that tries her best to ensure that students understand the lecture content, and clarifies doubts with students when they arise. As the content in this module is not primarily algorithmic or mathematical in nature, lectures are mostly relatively easy to understand and should not pose a problem to the majority of students (the slides on memory consistency are somewhat confusing, but the confusion is confined to that single topic). Her midterms and finals are closed-book (with help sheet), and they are very open-ended in nature — questions generally have many different possible answers — so during the exams it is sometimes difficult to tell if an answer is acceptable. As there are often many acceptable answers, it is recommended to answer all questions even you are not confident of your answers. Time management is also important in the exams as the exam paper is rather lengthy.
There are no group projects for this module, apart from the option to do the assignments as pair work.