Hardware-software co-design
Summary
This course offers a deep dive into the architecture and programming of modern computing systems, moving beyond general-purpose CPUs to explore how hardware and software are co-designed for maximum efficiency.
Content
Note : This is a hands-on, implementation-focused class where students will transition from theoretical performance modeling to programming specilized hardware.
Serveral of the course block will be based on the textbook "Efficient Processing of Deep Neural Networks (Synthesis Lectures on Computer Architecture)" by Vivienne Sze & al.
Tentative syllabus (up to reordering; a subset of bullet points within each block might be selected from year to year)
Block 0 : Principles of Hardware-Software codesign :
- Speed of light, Roofline analysis, Arithmetic intensity
- Little's law
- Taxonomy of parallelisms
- Custom datatypes (dynamic range, precision, quantitative benefits of quantization)
Block 1 : GPU
- Architecture (multi-level parallelism and integrated accelerators)
- GPU pseudo-ISAS (PTX)
- Compilation challenges
- Divergence
- Explicit management of memory hierarchy
- Practical GPU programming
- Kernel fusion (FlashAttention)
- Static dataflow graphs on a GPU
Block 2 : Systolic Architectures
- Systolically computable functions (theory), space-time mapping
- GEMM : Input, Weight, Output stationary dataflows
- Architecture (0-D + 1-D + 2-D systolic units + data orchestrators)
- Kernel fusion on systolic architectures
- Low-level programming for a TPU-like machine
Block 3 : Spatial architectures
- BSP paradigm
- Programming around the NoC
- Hypergraph partitioning
Block 4 : Sparsity
- Sparse matrix multipliction, graph analytics, recommendation systems
- Metadata representation
- Memory amplification and sort reduce
- Historical dataflow machines and modern reincarnation
Block 5 : Compilation challenges and techniques
- Domain space exploration : space of loop nest reordering "Algorithm vs Mapping"
- MILP for DSL compilers
- Simple DSL "JIT"s
- Egraphs
- Decoupled languages (Halide)
- Tiling languages (Triton, tilelang, cuTILE
- MLIR
Note that topics are tentative and will be explored at different depths. In class participation is strongly recommended.
Learning Prerequisites
Required courses
CS-173 Fundamentals of digital systems
CS-200 Computer architecture
CS-320 Computer language processing
CS-214 Software construction
Recommended courses
CS-470 Advanced computer architecture
CS-420 Advanced compiler construction
Important concepts to start the course
- Abstract Syntax Tree, Compilers
- Pipelining, Banking, Caching
- Comfort programming and debugging in HDL : Verilog/VHDL/Chisel/Bluespec
- Good software programming skills
Learning Outcomes
By the end of the course, the student must be able to:
- Analyze Performance Bounds
- Optimize Data Representation for hardware
- Do some simple Low-Level GPU Progamming
- Design Systolic Dataflows (Map kernels onto systolic arrays architecture, selecting good dataflows)
- Mitigate memory amplification
- Understand and Implement Kernel Fusion
- Build simple Domain-Specific Compilers
Teaching methods
- Ex cathedra lectures, labs, and final project
Expected student activities
- Come lecture, do the labs, do the project
Assessment methods
- Homework, written report (final project), presentation (final project)
Supervision
| Office hours | No |
| Assistant.e.s | Yes |
Dans les plans d'études
- Semestre: Printemps
- Forme de l'examen: Pendant le semestre (session d'été)
- Matière examinée: Hardware-software co-design
- Cours: 2 Heure(s) hebdo x 14 semaines
- Projet: 4 Heure(s) hebdo x 14 semaines
- Type: optionnel
- Semestre: Printemps
- Forme de l'examen: Pendant le semestre (session d'été)
- Matière examinée: Hardware-software co-design
- Cours: 2 Heure(s) hebdo x 14 semaines
- Projet: 4 Heure(s) hebdo x 14 semaines
- Type: optionnel
- Semestre: Printemps
- Forme de l'examen: Pendant le semestre (session d'été)
- Matière examinée: Hardware-software co-design
- Cours: 2 Heure(s) hebdo x 14 semaines
- Projet: 4 Heure(s) hebdo x 14 semaines
- Type: optionnel
- Semestre: Printemps
- Forme de l'examen: Pendant le semestre (session d'été)
- Matière examinée: Hardware-software co-design
- Cours: 2 Heure(s) hebdo x 14 semaines
- Projet: 4 Heure(s) hebdo x 14 semaines
- Type: optionnel
Semaine de référence
| Lu | Ma | Me | Je | Ve | |
| 8-9 | |||||
| 9-10 | |||||
| 10-11 | |||||
| 11-12 | |||||
| 12-13 | |||||
| 13-14 | |||||
| 14-15 | |||||
| 15-16 | |||||
| 16-17 | |||||
| 17-18 | |||||
| 18-19 | |||||
| 19-20 | |||||
| 20-21 | |||||
| 21-22 |
Légendes:
Cours
Exercice, TP
Projet, Labo, autre