parallel programming languages

We started the lecture describing the programming environment available on copper. Using shared memory computers is appealing for two reasons: (1) we can consider the finest grained parallelism: i.e.: instruction-level parallelism; and moreover (2) parallelizing compilers will automatically generate parallel code for us.

The Bernstein conditions on input and output of two processes are sufficient to determine whether two processes can run independently in parallel. We distinguished three types of depencency: flow, output, and anti. Only flow is a true dependency, the other two dependencies are removable. These dependency constraints form the edges in a data dependency graph used by a parallelizing compiler.

We ended the lecture by sketching the dependency graph for a double loop. Loop parallelization algorithms will be discussed when we get to parallel algorithms for numerical linear algebra.

Bibliography