説明
XCL_LATENCY 属性は、関数、ループ、および領域の完了するまでの最小レイテンシまたは最大レイテンシ、あるいはその両方を指定します。レイテンシは、出力を生成するのに必要なクロック サイクル数として定義されます。関数または領域のレイテンシは、コードがすべての出力値を計算して戻るまでに必要なクロック サイクル数です。ループ レイテンシは、ループのすべての反復を実行するのにかかるサイクル数です。 『Vivado Design Suite ユーザー ガイド: 高位合成』 (UG902) の「パフォーマンス メトリクスの例」を参照してください。
Vivado HLS ツールでは常に、デザインのレイテンシを最短にするよう試みられます。XCL_LATENCY 属性を指定すると、ツールで次のように処理されます。
- レイテンシが最小値より大きく最大値未満: 制約は満たされています。これ以上の最適化は実行されません。
- レイテンシが最小値未満: HLS ツールで指定の最小レイテンシ未満を達成できる場合は、レイテンシが指定値まで拡張されます。リソース共有が増加する可能性があります。
- レイテンシが最大値を超える: HLS ツールで最大値以下でスケジューリングできない場合は、指定された制約を満たすことができるようエフォート レベルが上げられます。それでも最大レイテンシを満たすことができない場合は、警告が表示され、達成可能な最短のレイテンシでデザインが作成されます。
ヒント: XCL_LATENCY 属性を使用すると、ツールで最良のソリューションを探すエフォートを制限することもできます。コード内のループ、関数、または領域にレイテンシ制約を指定すると、そのスコープ内で可能なソリューションが削減され、ツールの実行時間が短縮されます。詳細は、
『Vivado Design Suite ユーザー ガイド: 高位合成』 (UG902) の「ランタイムおよび容量の改善」を参照してください。
構文
XCL_LATENCY 属性は、関数、ループ、または領域本体の前に指定します。
__attribute__((xcl_latency(min, max)))
説明:
- <min>: 関数、ループ、またはコードの領域の最小レイテンシを指定します。
- <max>: 関数、ループ、またはコードの領域の最大レイテンシを指定します。
例 1
次の例では、関数 test
の for
ループ最小レイテンシを 4、最大レイテンシを 8 に指定しています。
__kernel void test(__global float *A, __global float *B, __global float *C, int id)
{
for (unsigned int i = 0; i < id; i++)
__attribute__((xcl_latency(4, 12))) {
C[id] = A[id] * B[id];
}
}
関連項目
- pragma HLS latency
- 『Vivado Design Suite ユーザー ガイド: 高位合成』 (UG902)