Run-time PDAG Evaluation
PDAGs are translated into Fortran code through a syntax-directed translation.
They can be evaluated before the loop under analysis in inspector-executor
mode, or during a speculative parallel execution of the loop.
In the inspector-executor mode, the PDAGs are separated into
a cascade of tests of increasing complexity.
Organization of Parallel Code
We generate a parallel version for each loop that is (1) worth parallelizing
and (2) cannot be proven sequential at compile-time.
In addition to dependence tests, we use PDAGs to express privatization
validity conditions.
In order to remove certain dependences,
we perform static and dynamic reduction and privatization,
including copy-in and last value assignment, as well as
induction variable detection and substitution and pushback sequence
parallelization.
The outer loop can be parallelized if the read from WORK is
covered by the two conditional writes.
Corresponding PDAG.
Generated test code. The simple condition is executed first.
If successful, the more complex test is avoided.