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
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)
Lab
Time to work on project
Additional Resources
Week 6 Class Discussion: Code Reviews & Data Structures