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)

    • Latency Numbers Every Programmer Should Know

    • 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

  • Time to work on project

Additional Resources