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

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