Assignment Schedule


Lab/Homework Exercises

Lab 1: Tools & Fundamentals: Floating Point Arithmetic, Functions, Tests (Due Aug 30)

Lab 2: Best Practices: Assertions, Unit Testing, Continuous Integrations, Benchmarking (due Sept 6)

  • Exercise 1: Benchmarking, Big-O Analysis, Compute vs Memory Limits

  • Exercise 2: Assertions, Unit Tests & Continuous Integration Testing

  • Exercise 3: Numerical Stability of N-body

Lab 3: Memory Access, Disk I/O, DataFrames (due Sept 13)

  • Exercise 1: Dense Matrix-Vector Multiply: Optimizing serial code, Memory access paterns, Benchmarking

  • Exercise 2: Benchmarking File I/O (no Python dependencies)

  • Exercise 2: Benchmarking File I/O (& Calling Python Packages)

Lab 4: Higher-level Languages & Probabilistic Programming (due Sept 20)

  • Exercise 1: Auto-differentiation & Optimization (as in minimization/maximization of a function)

  • Exercise 2: Probabilistic Programming Language

Lab 5: Serial Optimizations: Profiling, Type Stability, Code Inspection & Optimization Patterns (due Sept 27)

Lab 6: Parallel Programming I: Shared-memory Systems (due Oct 18)

  • Exercise 1: Parallelization for Multi-Core Workstations via Multiple-Threads

  • Exercise 2: Parallelization for Multi-Core Workstations via Multiple Processes

Lab 7: Parallel Programming II: Batch Jobs & Distributed Memory Systems (due Oct 25)

  • Exercise 1: Submitting Batch Jobs to ICS-ACI Cluster

  • Exercise 2: Parallelization for Distributed-memory Systems (e.g., Clusters, Cloud)

  • Exercise 3: Run your project code as a batch job on ICS-ACI

Lab 8: Parallel Programming III: GPUs & Other Hardware Accelerators (due Nov 8)

  • Exercise 1: Getting Setup for GPU Computing & Linear Algebra

  • Exercise 2: GPU Kernels & Array Programming

Lab 9: Reproducibility: Packages, Environments, Containers & the Cloud (due Nov 15)


Class Project Schedule

  • Project proposal (due Sept 6)

  • Serial version of code (due Oct 2)

  • Peer code review (due Oct 9)

  • Parallel version of code (multi-core) (due Oct 30)

  • Second parallel version of code (distributed-memory/GPU/cloud) (due Nov 13)

  • Completed code, documentation, tests, packaging (optional) & reflection (due Nov 29)

  • Class presentations (Nov 27 - Dec 6, detailed schedule )