Description
Apply the syn.directive.stable to arguments of a DATAFLOW or PIPELINE region.
The pragma indicates you can ignore the region's input or output when generating
synchronizations at the DATAFLOW region's entry and exit. Reading accesses of that
argument do not need to be part of the “first stage” of the task-level (resp.
fine-grain) pipeline for inputs. Write accesses do not need to be part of the last
stage of the task-level (resp. fine-grain) pipeline for outputs.
You can specify this pragma at any point in the hierarchy, on a scalar or an array. The pragma automatically applies to all the DATAFLOW or PIPELINE regions below that point. The DATAFLOW or PIPELINE region can start at another iteration even if the value of the previous iteration is unread. For an output, a write of the next iteration can occur even when the previous iteration is not complete.
Syntax
syn.directive.stable=<location> <variable>
-
<location>is the function name or loop name for constraining the directive. -
<variable>is the name of the array to be constrained.
Examples
In the following example, without the STABLE directive, proc1 and proc2
synchronize to acknowledge the reading of their inputs (including A). With the directive, A is no longer considered as an input requiring synchronization.
void dataflow_region(int A[...], int B[…] ...
proc1(...);
proc2(A, ...);
See the directives for this example below.
syn.directive.stable=dataflow_region variable=A
syn.directive.dataflow dataflow_region