A program is represented as a control flow graph (CFG), where basic blocks are nodes, and arcs represent flow of control.
Program execution can be viewed as walking through the CFG with a high level of parallelism.
A multiscalar processor walks through the CFG speculatively, taking task-sized steps, without pausing to inspect any of the instructions within a task.
The primary constraint: it must preserve the sequential program semantics.
A program is statically partitioned into tasks which are marked by annotations of the CFG.
The tasks are distributed to a number of parallel PEs within a processor.
Each PE fetches and executes instructions belonging to its assigned task.