Syllabus
This course aims to teach you how to write fast code for the specialized hardware and accelerators proliferating in modern computers. In MIT terms, it is a spiritual follow-on to 6.106 (6.172) Software Performance Engineering, where we graduate from mainstream CPUs to things like GPUs. (6.106 or similar low-level programming, performance analysis, computer architecture, and performance optimization experience is expected as a prerequisite.)
Key things we expect you to learn include:
-
Why do accelerators like GPUs look the way they do? We will both motivate and explain key architectural issues patterns like SIMD, multithreading, latency hiding, memory systems, matrix units, and spatial architectures (FPGAs/CGRAs), and see how similar ideas manifest in everything from multicore CPUs, to GPUs, TPUs, IPUs, and DSPs.
-
How can we program them for high performance? The course emphasizes developing practical experience writing & optimizing code on modern accelerators (mostly CUDA on NVIDIA GPUs), and how the major architectural ideas manifest in how we program them.
-
How to reason about accelerator performance from first principles.
The course is brand new, experimental, and under active development this term; you should expect rough edges. But we are excited to have you along on the journey with us, and are eager share what we know while also learning together with you!
Grading
The overall course grade comprises:
- 70% labs
- 25% final project
- 5% participation (primarily live lab attendance)
Late submissions
- You have 6 free “late days” to use on lab submissions over the course of the term.
- Beyond those 6, there is a 25% penalty for each additional day submissions are late.
- Late days may be used for both checkpoints and final submissions.
- We will automatically compute the application of late days to your submissions over the semester which maximizes your lab grade.
- Late days may not be used for the final project, as there is no slack at the end of the term to allow for this.
We will generally also allow a short grace period after the deadline to accommodate minor technical hiccups, at our discretion. You don’t need to ask for accommodation if a bug delayed your submission by 5 minutes.
Late days are intended to cover everyday disruptions like a mild illness, interview travel, or a confluence of deadlines with other classes. Additional extensions over and above this generous baseline will only be considered in exceptional circumstances with S^3 support.
Attendance
You may miss up to 2 live labs, no questions asked. As with late days for lab submissions, this is intended to cover common minor disruptions, and beyond this, excuses for exceptional circumstances will be considered with S^3 support.
Collaboration Policy
You are welcome and encouraged to discuss and learn from each other, but what you ultimately submit should represent your own individual final implementation.