Advanced Parallel Programming
Parallel computing is ubiquitous today for problems which require more resources than a single serial computer can provide. Programming parallel computers requires new paradigms,algorithms and programming tools.This course covers fundamentals of parallel programming, illustrated with applications developed and tested by students on a parallel computing system provided for the course. The parallel programming paradigms to be covered include OpenMP for multicore shared memory computers, MPI for distributed memory parallel computers, CUDA programming for GPUs (Graphic Processing Units), and Apache Hadoop/Spark for big data processing on computer clusters. The course will focus on the challenges in developing practical parallel programs that scale efficiently with available computing resources.