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