Basic Information

  • Course Code: AE 6102
  • Course Name: Parallel Scientific Computing and Visualization
  • Course Offered In: Spring 2023
  • Instructors: Prof. Prabhu Ramachandran
  • Prerequisites: None, The professor expects strong familiarity with python, the assignments require laptops with sufficient RAM, cores, Nvidia GPU (else make other arrangements like colab, remote ssh .etc), brief familiarity of topics such as caching, pipelining, multi-core, GPU, superscalar, amdahl’s law from EE 309, CS 683 can serve useful (a big plus for EE junta)
  • Difficulty (on a scale of 5): 3

Course Content

The professor has developed most of the tools used in the course by himself to provide a good introduction to the field of parallel programming.

The course starts with a refresher to python, introduction to professional programming practices such as code quality, pep8, cli to python via argparse which the professor takes strictly and expects one to follow in all assignments and the course project

Then the focus shifts to numpy where the vectorisation operation is taught in quite detail. Through some examples methods are taught to rewrite algorithms using vectorisation to achieve significant speedup. The numba library is introduced and how rewriting code in NJIT compiling format can be used to again achieve significant speedup

Then python tools like automan (a script automation and benchmarking tool developed by the professor himself) is introduced and how it can be used to perform simulations, a session is taken on time benchmarking, code profiling and debugging

There is a shift to theory where topics from HPC and computer architecture like caching, parallelism, pipelining, multi-core, GPU, SIMD, superscalar, amdahl’s law are taught. With sufficient theoretical background, the compyle library (developed by the professor again) which is like an abstracted version of openMP, CUDA to provide a good introduction. Powerful parallel algorithms are shown with examples on compyle. The course shifts to MPI and the usage of a library mpi4py.

The course finally shifts to the visualization part where the library mayavi is taught for the last few weeks, it is a tool developed by the professor again, which allows easy visualisation of complex data like vector fields, surfaces, higher dimensionality plots .etc. A session is taken on how data is represented via Traits in 3D computer graphics libraries like VTK

Feedback on Lectures

The lectures are excellent, the professor makes an interactive presentation with markdown + jupyter code blocks, and provides a live demo of various techniques and topics learned in the course, some portions are theoretical, which the professor does a great job in explaining via the black board. Some lectures are like workshops where the entire class needs to use their laptops and follow along.

A highlight of the course was a field trip to Space-time, IITB’s own super computer facility, where the concepts learned about HPC infrastructure could be seen live in action. Also a temporary remote access to the compute nodes of this cluster was provided to interested students.

A lecture on hardware infrastructure of supercomputers and cloud computing clusters was taken before the Spacetime field trip

Feedback on Evaluations

In parallel with the teaching, assignments relevant to the content taught are posted weekly. Assignments have strict code quality checks, and are autograded. Extremely relevant assignments, allow one to see code speedup in action. There were assignments where 1000x speedup was achieved by using some of the concepts learnt in the course.

There is a course project with 1-2 members, where 2-3 concepts learnt in the course should be used to solve any interdisciplinary research or engineering problem. The topic needs to be informed to the professor and TAs. The professor encourages people to find problems in their own field of interest/department. for example, we had worked on speeding up VLSI CAD algorithms

The endsem was quite out of the ordinary, it had a live programming portion as well a theory portion

Study Material and Resources

Documentation of various libraries online, for theory slides are well made and sufficient, they often contain links to reference material depending on the topic being covered

Final Takeaway

This course is aimed to anyone working in engineering/research at simple techniques and modifications to achieve high amounts of processing speedup. It has extremely high practical relevance and concepts learnt here can be used in daily life to write more efficient code and also how apt visualization of data can lead to effectual inferences. It allows one to see some of the topics discussed theoretically in computer architecture work live in action

Even though the course is completely pythonic, one should have a sufficient understanding to pick up parallel programming frameworks like CUDA quickly.

Highly recommended for anyone with interests in HPC, Parallel Programming, Computer Architecture