99.504 High Performance Computing in Science and Engineering
Course Description
The High Performance Computing in Science and Engineering course aims to enable students to operate effectively on high performance computers. The students will first be introduced to High Performance Computers, and to the main programming language used in the course: Julia. The students will learn how to effectively submit jobs to computing servers, to parallelize their codes and to use numerical libraries such as OpenBLAS, BLAS, LAPACK, MKL, CUDA.
Advanced numerical methods will be another focus of the course, including eigensolvers (e.g. Lanczos), numerical integrators (including Burlisch-Stoer and symplectic methods), and optimization methods based on (linear) tensor networks and (nonlinear) neural networks.
This is a course intended for PhD students and for term 6 or term 8 undergraduate students.
Learning Objectives
At the end of the term, students will be able to:
- use different linear algebra libraries
- write scripts for jobs schedulers
- write and analyze parallel codes for CPUs and GPUs
- approximate eigenvalue solvers: Lanczos and Arnoldi
- understand advanced (symplectic or not) numerical integration methods
- understand optimization methods based on tensor networks and neural networks
- plan the implementation of the numerical solution of a complex problem and evaluate its performance
Grading Scheme
Quizzes, group assignment (project), individual assignment (project/homework) and class participation