Lab 1: Tools & Fundamentals: Floating Point Arithmetic, Functions, Tests (Due Aug 30)
Exercise 1: Get started using core development tools
Exercise 2: Floating Point Arithmetic, Functions, Tests
Exercise 3: Personal Goals (save at least 15 minutes for this one)
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)
Exercise 1: Profiling
Exercise 2: Type Stability & Code Inspection
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)
Exercise 1: Create a Julia Package
Exercise 2: Use a Workflow management system
Exercise 3: Reflect on your Goals for the semester
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 )