The art of Multiprocessor Programming
Bob and Alice are neighbors. Unfortunately, they hate each other to such an extent that they are not in talking terms. Now, Bob owns a dog, and Alice owns a cat. They have decided that they will not allow their pets to play in the yard at the same time. Since they don't talk, each of them has a flag used for communication, which can either be raised up or down. Using the two flags, is it possible to devise a protocol to ensure that both the pets are not in the yard at the same time? Secondly, can we ensure that the scheme is fair, eliminates endless waits, and is free of deadlocks?
Surprisingly, the answer to this question, and many related problems are the
foundations of modern multicore processors.
In this course, we will delve into similar problems, and study the basics of
mutual exclusion, memory consistency and concurrent data structures. The course thus covers the foundational aspects of parallel programming APIs like openMP, openCL, CUDA and so on.
The course has both a theoretical
component and an applied component.