Prof. Partha Dasgupta, Arizona State University
Computer CPUs have made the move to multi-core architecture due to issues with fabrication, power management, performance and packaging. Given that each core of modern CPUs have the same or less compute power than older single-core CPUs, to improve application performance it is necessary to use more than one CPU to perform each task. Hence the need for “parallel processing” within applications. This course is designed to teach the concepts of parallel programming using the shared memory and the distributed memory architectures of modern CPUs. The course covers the techniques and APIs used for managing multiple threads within an application, in both shared memory and distributed memory systems.
Part 1: Multicore Architectures (UMA, NUMA, CC-NUMA and the impact on software)
Part 2: Concurrency and Parallelism (The similarities and differences in concurrency and parallelism in programs)
Part 3: Scheduling and performance (How scheduling affect performance. How granularity depends on architectures)
Part 4: Shared Memory Programming (Race Conditions, Critical Sections, Syncrohization and programming techniques)
Part 5: Distributed Memory Programming (Message passing, RPC, and Programming techniques)
Part 6: Massively Parallel Architectures and Programming (Nvidia and CUDA). Linear and Non-Linear approaches to Image Processing
Prerequisites: Programming, Data Structures, Basic knowledge of Computer Architecture and Operating Systems..
Evaluation: lab assignments, final report
Students
Ruben Prado,
Michael Bertapelli,
Pritha Narayanappa,
Sagar T.U.,
Sakshi Bhatnagar,
Swati Singhi,
Mitchel Vlentina Dsouza
Manoj Hosabettu Rao
Praveen Jain
Ankit Pandey
Babak Goshtasbi
Joshua Liong
Nathan Pickrell
Matt Sguerri
Richard Wang
Haney Williams
Volkan Aginlar
Yulia Newton
Sarah Wannamaker
Valentin Delaye
Alexandre Kovar
Matthieu Reussner
Marc Sommer
Cyprien Huissoud
Mohamed Regaya
Piotr Maicher
Lionel Gaillard
Yvan Da Silva