next up previous contents
Next: Sequence empty Up: In case we have Previous: In case we have   Contents

Sequence $[\mathsf{I};\mathsf{C}[$ non-empty

If I $>$ beginning of main, then we move the instructions from the beginning of main up until (but not including) I into parcode. This code is not going to be parallelized.

If the code could be parallelized it would already have happened. The parallelizer is ``greedy''. It goes parallel the moment it sees a possibility for doing so.

Now we create two entries in the tasks array. Task 0 and task 1. We move all code in $[\mathsf{I};\mathsf{C}[$ into task 0. This code is something that succeeds the instruction that we depend upon, so we put it in a task for itself. Finally we move the current instruction C into task 1.

This is optimal. All the code in $[\mathsf{I};\mathsf{C}[$ has sequential dependencies, so we cannot split that up further. If it did not have sequential dependencies it would already be parallel.