AE 6102 - Parallel Scientific Computing and Visualization

 

Autumn 2022

Prof. Prabhu Ramachandran

Author: Vishnu Sankar

Pre-requisite courses: None

Pre-requisite skills:

  • Python programming
  • Exposure to numerical methods

Course Content:

  • Introduction to scientific computing with high-level languages
  • Efficient use of arrays for vectorized computation
  • Using modern tools for improved performance
  • Basic debugging and profiling
  • Three dimensional plotting of scientific data
    • Using VTK and Mayavi for 3D visualization
    • Introduction to other popular visualization tools like ParaView
    • Basic OpenGL for simple but fast rendering
  • High-level parallel computing on multi-core CPUs and GPUs:
    • Programming using parallel primitives: map, reduce, and scans.
    • Introduction to other high-level parallel computation packages.
  • Brief introduction to distributed computing with MPI.
  • Building simple UIs for scientific computing
  • Automation and reproducibility of scientific computing workflows
  • Case study of how these can be put together to build a modern, HPC package, and perform reproducible research.

Course Evaluation Structure:

  • Assignments - 65%
  • Group project - 25%
  • Quiz - 10%

Quizzes/Midsem/Endsem papers Difficulty: 3/5

Overall Course Difficulty: Moderate

Average Time Commitment: (Apart from lectures and tutorials) Between 6-8 hrs per week

Info about Projects/Assignments:

  • Very hands-on course with an assignment every week
  • Course project is very open-ended, but you are expected to use visualization for a problem by solving it using numerical computing. If you are already working on a problem for your BTP or SLP which requires nice visualization then its easier to complete the project with “good” feedback from the professor

General funda: This course definitely requires significant time in completing all the assignments and course project. Take it only if you don’t have major time commitments.

Professor’s Teaching Style: As always Prabhu sir’s teaching is pretty detailed. We spent a lot of time learning visualization, so we had less time to cover parallelization in depth

References OR online resources:

  1. Introduction to High Performance Computing for Scientists and Engineers, Georg Hager and GerhardWellein, CRC Press, 2010

  2. Visualization Toolkit: An Object-Oriented Approach to 3D Graphics, 4th Edition, https://vtk.org/vtk-textbook/ (https://vtk.org/vtk-textbook/)

  3. Prefix Sums and Their Applications. Blelloch, Guy E, Sythesis of parallel algorithms, Morgan KaufmannPublishers Inc., 1990, http://www.cs.cmu.edu/~guyb/papers/Ble93.pdf

  4. High Performance Python 2e: Practical Performant Programming for Humans by Micha Gorelick, IanOzsvald, Publisher: O′Reilly; 2nd edition (7 May 2020)

  5. Learning Concurrency in Python. Elliot Forbes, Packt ISBN 9781787285378, 2017

Should you do this course?: Anyone who wants to learn more about the crux of numerical computing, visualization, creating GUI for visualization, automation, increasing the speed of Python code and parallelization can take up this course. Exposure to OOPs concepts is not mandatory. But your Python coding skills should be atleast in an intermediate stage, you cannot pick up python while doing this course.