ME766 - High Performance Scientific Computing

ME766 - High Performance Scientific Computing

Instructor

Prof. Shivasubramanian Gopalakrishnan

Semester

Spring ‘20

Course Difficulty

Easy/Moderate

Time Commitment Required

Low to moderate depending on person to person

Grading Policy and Statistics

AA 78
AB 135
AU 10
BB 54
BC 5
FR 4
W 1
Total 287

Attendance Policy

No mandatory attendance

Pre-requisites

Knowledge of basic C/C++ and basic use of Linux terminal can be helpful although this can be learnt along the course as well by putting little more efforts.

Evaluation Scheme

The evaluation was based on three coding assignments (which accounted for 20% of the grade) and a course project(which accounted for 80% of the total grade) Good performance in the course project, therefore, was crucially important for a good grade.IN assignments almost all got the marks for the submission only:)

Topics Covered in the Course

Introduction to high performance computing and scientific computing. Processor performance. Memory hierarchy. Multi-core processing and Vector computing. Introduction to parallel programming concepts and parallel algorithms. Effective use of command line Linux. Introduction to OpenMP and thread programming. Introduction to MPI programming. Introduction to GPGPU / Vector programming Effective use of debuggers and parallel debugging. Use of version control systems such as Git/SVN/Mercurial. Introduction to Parallel programming using CUDA, OpenCL.

Teaching Style

Lectures were very interesting. Instructor is enthusiastic and takes interest in learning of the students. Prof takes a lot doubts in the class and were very fast to clear doubts on mails as well. There will be demonstrations in the class regarding the use of parallel programming libraries and the various APIs used in the libraries which help in understanding of the parallel algorithms and multiple processes.
Lectures are sufficient to do well in assignments, project.

Tutorials/Assignments/Projects

Understanding of concepts is almost entirely dependent on the sincerity with which you would attempt the coding assignments.
We had 3 coding assignments. The first assignment was to parallelize numerical integration method (trapezoid and montecarlo methods) using OpenMp and to compare the performance with the serial code. The second assignment was to the parallelize the code to find the product of two matrices and then make the resultant matrix upper-triangular using OpenMP, MPI. The third was solve the parallelize problem in second assignment using CUDA/OpenCL.
The course project was to be done in a team of 4 students. The topic of the project can be selected from the list of past topics provided or the team can come with their own idea. Some really interesting projects such as Parallelizing Eigenface based face recognition, Google page rank algorithm, Parallel Neural Network Framework etc., were done by the students. The marks of the project were distributed among the code, report, presentation and individual contribution of each member.

Motivation for taking this course

Interest in coding was the major motivation along with the fact that it could be tagged as DE.

Course Importance

Techniques learnt in the course are very useful when you are working on some research or any other project. Using these helps code run efficiently, saves time, allowing the execution of applications in a shorter wall-clock time and uses the computer resources efficiently

How strongly would I recommend this course?

Strongly recommended

When to take this course?

I took this in my 4th semester but according to the prof it is recommended to take the course in your 3rd/4th year ie. 6th or 8th semester.

References Used

Slides and the resources provided by the instructor are enough.

ME 766 Review By: Arpit Tiwari