This course covers the modern parallel and GPU programming using C# so that the computation time of large problems can be greatly reduced. It starts out with a review of models of parallel computation including shared memory, message passing, SIMD and MIMD architectures. Multithreading concepts in C# including creating and synchronizing threads, coordinating threads, monitors, semaphores, mutexes and thread pooling are presented through examples. The next part of the course covers improved parallel programming through the use of Task Parallel Library (TPL). Major concepts in TPL such as creating, cancelling and coordinating tasks are covered in detail. Different sorting, matrix, image processing, meta-heuristic and artificial intelligence algorithms and their parallelization is described. The last part of the course covers GPU programming and presents examples of algorithms that greatly benefit from the numerous cores available in a GPU.
Some background in programming in a modern language such as C#, or VB.Net, or Java or C++.