99.504 High Performance Computing in Science and Engineering

Home / Education / Graduate / Courses / 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:

  1. use different linear algebra libraries
  2. write scripts for jobs schedulers
  3. write and analyze parallel codes for CPUs and GPUs
  4. approximate eigenvalue solvers: Lanczos and Arnoldi
  5. understand advanced (symplectic or not) numerical integration methods
  6. understand optimization methods based on tensor networks and neural networks
  7. plan the implementation of the numerical solution of a complex problem and evaluate its performance

Academic Units/Delivery Format

12 Credits

Grading Scheme

Quizzes, group assignment (project), individual assignment (project/homework) and class participation

Course Lead

Dario Poletti

2022-07-18T11:13:49+00:00