Goals
Describe what an optimizing compiler can optimize for you
Describe what an optimizing compiler can't optimize for you
Understand how linear algebra libraries acheive peak performance through memory access pattern
Describe interaction between global variables and type stability of functions
Explain why parallelism in increasingly important
Describe function overloading & multiple dispatch
Describe benefits of use abstract types and containers of abstract types
Describe benefits of an Application Programming Interface
Readings
Prior to Monday's class
Writing Scientific Software Ch 14: Memory Allocation & Garbage Collection (excluding 4.5; 11pg)
Writing Scientific Software Ch 12.1: Caches & memory hierarchies, 12.4 Threashing, 12.5 Designing for memory hierarchies, 12.6 Dynamic data structures and memory hierarchies (pg)
Optionally one of
Introduction to High Performance Computing for Scientists and Engineers Ch 3 Data Access Optimization (excluding 3.1.2, 3.3, 3.3; 20pg)
Introduction to High-Performance Computing Ch 1.7: Programming strategies for high performance (16pg)
Prior to Wednesday's class
Lab
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
Additional Resources
Week 9, Monday Discussion: Using the Roar supercomputer
Week 9, Monday Q&A: Distributed memory programming