This paper covers advanced parallel programming for large-scale parallelism. A variety of programming techniques will be covered, with application to cluster computers, GPU computing, many-core computing. This paper will be taught using a mixture of classroom and online delivery modes.

Learning OutcomesStudents will be able to explain the basic concepts, benefits, and challenges of parallel programming. They will be able to develop simple parallel programs using a variety of techniques, such as the Hadoop map-reduce framework, the OpenCL language for GPU programming, and Java threadpools. They will understand key Java performance issues and be able to suggest ways of measuring and improving performance.

All students should attend the weekly two-hour lab on Thursday, 1-3pm in Lab 1 (R Block).

On weeks 3, 7, 10 and 12, there will be lectures at Thursday 11am-12pm (AG.30) and Friday 9-10am (I1.01), while the other weeks of the semester will be taught online using a flipped classroom approach.