Schedule

Due events are indicated in red in the column on the right. All due events with a given date are due on 09:59 pm that day.

Week Tuesday Thursday Labs Events
1(4) Lecture 1: 2024-01-23
  • Class introduction/organization
  • Moore's Law
  • Transistor density and power limit
  • Parallel computing
  • Flynn's taxonomy
  • Overview of parallelism treated in class: DLP, ILP, TLP, shared memory and distributed memory
Lecture 2: 2024-01-25
  • Computer architecture
  • von Neumann architecture
  • Memory pyramid
  • Linux process anatomy
  • Introduction to compute cluster: access, job submissions
  • Reading: Leiserson paper
Sign-up:

Select one of the offered lab session days according to your schedule

Note:

The "Reading" assignments are relevant for the lecture and due on the day of the lecture!

  1. Complete the CS 205: C++ Survey
    (2024-01-23)
  2. Lab section preferences submitted on this spreadsheet
    (2024-01-26)
2(5) Lecture 3: 2024-01-30
  • Cache memories: why are they there, how they work
  • Cache lines and the 3 C's
  • What is temporal and spatial locality
  • Cache associativity: fully, nn-way, direct mapped
  • Memory access patterns (differences row-major / column-major)
Lecture 4: 2024-02-01
  • Shared memory introduction
  • Examples of concurrency and concurrent memory access
  • Why is shared memory programming hard: what is a race condition and why/how does it happen
Lab 1:

Accessing cluster, SLURM, Linux, compiler and C++ tutorials.


  1. Quiz 1
    (2024-02-02)
  2. HW1 release
    (2024-01-30)
3(6) Lecture 5: 2024-02-06
  • Memory model for shared memory programming and its implications on compilers
  • Sequential consistency
  • Mutual exclusion / critical sections / locks
  • Overview of thread libraries
Lecture 6: 2024-02-08

  1. Lab 1 due
    (2024-02-09)
  2. Project team formation due
    (2024-02-06)
4(7) Lecture 7: 2024-02-13
  • OpenMP: data environment
  • OpenMP: synchronization constructs
  • OpenMP: library routines
  • OpenMP: environment variables
Lecture 8: 2024-02-15
  • OpenMP: data environment
  • OpenMP: synchronization constructs
  • OpenMP: library routines
  • OpenMP: environment variables
Lab 2:

OpenMP locks, critical sections and atomic clauses.


  1. HW1 due
    (2024-02-13)
  2. HW2 release
    (2024-02-13)
  3. Quiz 2
    (2024-02-16)
5(8) Lecture 9: 2024-02-20
  • UMA/NUMA memory architectures and processor affinity
  • What is cache coherency and why is it required in shared memory programming
  • Cache coherency protocols (focus on MESI)
  • False sharing
Lecture 10: 2024-02-22
  • Performance analysis (single node)
  • Relationship of compute performance (flop) to memory bandwidth
  • Roofline model
  • Reading: Williams paper
Lab 3:

False sharing and cache thrashing.


  1. Lab 2 due
    (2024-02-23)
  2. Project high-level description due
    (2024-02-20)
6(9) Lecture 11: 2024-02-27
  • Introduction to distributed programming (recap Flynn's taxonomy)
  • What is the Message Passing Interface (MPI)
  • Simple parallel MPI program example
Lecture 12: 2024-02-29
  1. Lab 3 due
    (2024-03-01)
7(10) Lecture 13:2024-03-05
Lecture 14:2024-03-07
  • MPI: I/O file management
  • MPI: I/O read and write routines
  • Parallel I/O for data compression example
Lab 4:

MPI reductions and scans.


  1. HW2 due
    (2024-03-05)
  2. HW3 release
    (2024-03-05)
  3. Quiz 3
    (2024-03-08)
8(11) Spring break: 2024-03-12 Spring break: 2024-03-14
9(12) Presentations for project proposals:
2024-03-19
Presentations for project proposals:
2024-03-21

  1. Lab 4 due
    (2024-03-15)
  2. Project proposals due
10(13) Lecture 15: 2024-03-26
  • Parallel scaling analysis
  • Strong scaling / Amdahl's law
  • Weak scaling
Lecture 16: 2024-03-28
Lab 5:

Linking your code with third party libraries. Examples for BLAS and LAPACK.


  1. HW3 due
    (2024-03-26)
  2. HW4 release
    (2024-03-26)
11(14) Lecture 17: 2024-04-02
  • Assembly language (x86-64)
  • Recap Flynn's taxonomy: SIMD
  • Instruction set architecture extensions
  • What is vectorization and why is it important
  • Floating-point operations in x86-64
Lecture 18: 2024-04-04
  • Memory alignment and relation to cache lines
  • Manual vectorization
  • Intel intrinsics

  1. Lab 5 due
    (2024-04-05)
12(15) Presentations for project designs:
2024-04-09
Presentations for project designs:
2024-04-11

  1. Project designs due
13(16) Lecture 19: 2024-04-16
  • Main difference between CPU and GPU architectures
  • Introduction to CUDA
  • CUDA warps and threads
Lecture 20: 2024-04-18
  • Kokkos
Lab 6:

Understanding machine instructions by learning how to debug code.


  1. HW4 due
    (2024-04-16)
  2. HW5 release
    (2024-04-17)
  3. Quiz 4
    (2024-04-19)
14(17) Lecture 21: 2024-04-23
  • TBD
    • TBD
  • Class summary
Reading period: 2024-04-25
  1. Lab 6 due
    (2024-04-26)
15(18) Reading period: 2024-04-30 Exam period: 2024-05-02
  • Project final presentations:
    • 2024-05-02
    • 2024-05-03

  1. HW5 due
    (2024-04-30)
  2. Project deliverables due
    (2024-05-02 8:00 AM)
  3. Project final presentations due
    (2024-05-02/03)
16(19) Exam period: 2024-05-07 Exam period: 2024-05-09