Office Hours: Wed 1-3pm MEB 3454
TA: Vairavan Sivaraman - TTh 12-2pm MEB 3159
This course is structured to train students to reason about the design and implementation of efficient parallel programs. The focus areas of the class will be on the modeling, implementation and evaluation of distributed, message-passing interface (MPI) based programs, shared-memory thread-based OpenMP programs, and hybrid (MPI/OpenMP) programs. Almost all examples will be aligned with numerical scientific computing. This course is appropriate for those that want transform serial algorithms into parallel algorithms, want to modify currently existing parallel algorithms, or want to write parallel algorithms from scratch.
Here is a tentative outline of topics.
###Prerequisites & Expectations
While there are no formal prerequisites, basic understanding of Partial differential equations, linear algebra, sequential algorithms and data structures is expected. Additionally, reasonable programming skills (preferably C/C++ or Fortran) and familiarity with Linux or Unix is also expected. The assignments/projects will be parallelized using OpenMP and MPI (Message Passing Interface).
Adherence to the CoE and SoC academic guidelines is expected. Please read the following.
We shall be using two clusters for the assignments and projects. The first one is Tangent that is managed by CHPC at the U. Tangent has 64 nodes each with 16 cores and 64GB of RAM. I recommend that you use this cluster for smaller tasks and debugging. We also have access to Stampede, the 7th fastest supercomputer in the world according to top500. Stampede has 6400 nodes each with 16 sandy bridge cores, 32GB of RAM and an Intel Xeon Phi accelerator card. We will be using Stampede for large scalability studies. Please fill out this form as soon as possible to get access to these machines. I would also recommend that everyone install MPI locally on their machines.
There will be a 2-3 programming assignments, a mid-term exam and a final project. The assignments will be based on materials discussed in class. A tentative grade division is listed below.
10% - class participation 15% - assignment #1 15% - assignment #2 20% - midterm 15% - assignment #3 25% - final project
The assignments will be a combination of theoretical problems and a programming task. Template code for the programming tasks is available on the course github page. The programming tasks will be automatically graded. You will be awarded 60% marks for correctness of your code and the remaining 40% will be based on performance (runtime and scalability) compared to other students.
I shall keep adding reading materials during the semester.
We will be using google groups to communicate. Please subscribe yourself to this group, as all announcements will be made using this.