(Originally recorded 2019-05-07)

In this lecture we take a detailed look at parallelizing a simple algorithm: numerical quadrature for computing the value of \(\pi\). We apply the Mattson et al patterns approach to parallelizing the algorithm and examine correctness as well as performance issues.

An unexpected error arises (or can arise) from concurrent accesses to
shared variables: **race condition**. We discuss the critical section
problem and a couple of approaches for solving it.

**Scalabiity** is a fundamental concept in high-performance computing.
We introduce scalability via Amdahl’s law and Gustaffson’s law (strong
and weak scaling, respectively).