Architectural support for the efficient data-driven evaluation scheme

Dataflow models promote parallelism by providing a representation in which independent computations of a program can be detected implicitly and executed concurrently. In the dataflow model, graphs represent programs, nodes represent operations and arcs indicate the flow of data between operations [Den74,KBB86]. It is the concurrent execution of every operation whose data is ready which promotes fast parallel execution. A dataflow graph is usually evaluated according to one of two standard execution schemes: the demanddriven scheme, or the data-driven scheme. The demanddriven execution scheme adopts the lazy mode of evaluation which delays the activation of an operation until its result is known to be useful (i.e. needed for the final results). This is usually implemented by propagating demands “backwards” through the dataflow graph and then activating only useful computations. However, the overhead incurred by the demand-driven execution scheme is high since the dataflow graph must be traversed twice once to propagate the demands for inputs, and once to calculate the results. Moreover, the actual evaluation of the dataflow graph does not begin until demands have propagated all the way through the dataflow graph. This prevents pipelined operation of ‘producer’ and ‘consumer’ parts of code. The data-driven execution scheme addresses this problem by activating an operation as soon as all of its inputs are available. This scheme adopts the principle of eager evaluation to the dataflow context.