# 18.S096 Special Subject in Mathematics:

Performance Computing in a High Level Language

**Professors:** Steven G. Johnson, Alan Edelman, David Sanders,
Jeff Bezanson

**Dates:** Tuesday-Friday, January 10-27

**Time:** 2:00pm - 4:00pm

**In Class Office Hours:** Tuesday, Wednesday, Friday, 3:30pm - 4:00pm

**Location:** Room 2-135

**TAs:** Corbin Foucart (foucartc ατ mit.edu, CorbinFoucart on github) and Dan Segal (djsegal ατ mit.edu, djsegal on github)

## COURSE INFO

MIT Registrar Page: http://student.mit.edu/catalog/search.cgi?search=18.S096&style=verbatim

Many programmers are familiar with high-level dynamic/interactive computer languages such as Python, R, or Matlab. Traditionally, such languages approach the computer at a high level of abstraction, and performance optimization is mainly a matter of finding fast “black-box” library routines. In this course, we bridge the gap between high-level “dynamic” languages and what is really happening at a low level. Using a new language called Julia, we show how one can simultaneously write high-level, generic, interactive programs that are also optimized for performance, and which implement their own “inner loops” without relying on external libraries.

Topics include how program objects are represented in memory (types, “boxes,” registers, etc.), processor architectures, memory locality, metaprogramming and moving computations from runtime to compile-time, parallel computing, sparse and dense linear algebra, machine learning, graphics, and applications of numerical analysis.

Students should be comfortable with programming.

## SYLLABUS

See also the course overview slides from the first day.

January 10: | Boxes, Types, and Registers (SGJ) |

January 11: | Memory Locality: slides and notebook (SGJ) |

January 12: | Lab Day |

January 13: | Types and Dispatch: notebook and messy notebook from lecture (JB) |

January 17: | Metaprogramming: notebook and messy notebook from lecture (JB) |

January 18: | Sparse and Dense Linear Algebra: notebook (SGJ) |

January 19: | Lab Day |

January 20: | Numerical Analysis: notebook and messy notebook from lecture (SGJ) |

January 24: | Parallel Computing: notebooks (AE) |

January 25: | Automatic Differentiation and Interval Arithmetic: notebooks (DS) |

January 26: | Lab Day |

January 27: | Visualization and 3D Rendering with GLVisualize (Simon Danisch) |