Course Description
This is a practical, hands-on course on parallel programming.
We will develop our skills using real scientific applications.
Prerequisites
Expertise in C and/or C++ programming and in using Linux
systems. Familiarity with Matlab, which will be used to specify
some of the algorithms.
Topics
- Processor architectures and trends
- Review of POSIX threads and C++11 threads
- Advanced OpenMP
- Advanced MPI, including nonblocking collectives,
one-sided/RMA and MPI shared memory
- Global Arrays, PGAS languages
- Task-based runtime systems
- Hybrid programming (MPI+OpenMP, MPI+MPI)
- SIMD programming with intrinsics
- Intel Xeon Phi (KNC) offloading
- Intel tools and libraries: VTune, MKL, compiler vectorization reports, etc.
- Other programming models, parallel languages, and tools
- Applications in PDE simulations
- Applications in dynamic particle simulations
- Applications in quantum chemistry
Grading
- 20% Lab exercises (about 10 during the semester). You must be able
to bring a laptop to class for the labs.
Each lab exercise will be assigned during a lecture and will be
due approximately 36 hours later. You can miss two lab exercises
without any penalty.
- 30% Mini-projects (about 3 during the semester).
- 50% Project (with presentation and report). Project topics will
be given in class.
Computer Resources
Students in this course will use
Intel Xeon Phi hardware, which is
specifically designed for high performance computing.
Recommended Textbooks
Acknowledgment
We thank the Intel University Program Office for a grant providing hardware used
in this course.