Here are a list of study materials that I highly recommend:
TextBooks
- Encyclopedia of Parallel Computing
- A comprehensive book about key concepts in parallel computing. Entries are all written by established researchers in the field.
- Optimizing Compilers For Modern Architectures; A Dependence Based Approach
- A classic textbook on auto-parallelization and locality optimizations.
Online Courses
- UC Berkeley CS267 - Applications of Parallel Computers
- A great course covering an overview of the parallel architecture, some of the most popular parallel programming tools and a broad set of parallelization strategies.
- MIT 6.172 - Performance Engineering of Software Systems
- Topics include performance analysis, algorithmic techniques for high performance, instruction-level optimizations, caching optimizations, parallel programming, and building scalable systems.
CUDA Programming Tutorials
- CUDA Training Series
- The best CUDA tutorial for beginners I've ever seen. Recordings are available for each chapter.
- Intro to Parallel Programming
-
- A great online course by Prof. David Owens that covers fundamental ideas of parallel programming, and teaches CUDA programming. The interview parts is a bonus.
Historical Perspectives
- Parallel Processing, 1980 to 2020
- A historical survey of parallel processing by Robert Kuhn and David Padua.
Seminars (Latest Research Topics)
- SPCL Bcast
- An online seminar series that covers a broad range of topics around parallel and high-performance computing, scalable machine learning, etc from SPCL at ETH.
- MIT Fast Code Seminar
- A great seminar series on the theory and practice of performance engineering.