説明
syn.directive.stable を DATAFLOW または PIPELINE 領域の引数に適用します。このプラグマは、DATAFLOW 領域の入口および出口で同期を生成する際に、その領域の入力または出力を無視できることを示します。入力の場合、読み出しアクセスはタスク レベル (または細粒度) パイプラインの「最初のステージ」に含める必要はありません。出力の場合、書き込みアクセスはタスク レベル (または細粒度) パイプラインの「最後のステージ」に含める必要はありません。
このプラグマは階層内の任意の位置で指定でき、スカラーまたは配列に適用可能です。指定した位置より下のすべての DATAFLOW または PIPELINE 領域に自動的に適用されます。DATAFLOW または PIPELINE 領域は、前のイテレーションの値がまだ読み取られていなくても次のイテレーションを開始できます。出力の場合、前のイテレーションが完了していなくても次のイテレーションの書き込みを実行できます。
構文
syn.directive.stable=<location> <variable>
-
<location>は指示子を制約するための関数名またはループ名です。 -
<variable>は、制約される配列の名前です。
例
次の例では、STABLE 指示子を使用しないと、proc1 と proc2 が同期化され、その入力 (A を含む) の読み出しが確認されます。この指示子を使用すると、A は同期が必要な入力としては認識されなくなります。
void dataflow_region(int A[...], int B[…] ...
proc1(...);
proc2(A, ...);
この例の指示子は、次のとおりです。
syn.directive.stable=dataflow_region variable=A
syn.directive.dataflow dataflow_region