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 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
Additional Resources
Week 8, Monday: Parallelization: Q&A and Scaling Laws