syn.directive.performance - syn.directive.performance - 2026.1 日本語 - UG1399

Vitis 高位合成ユーザー ガイド (UG1399)

Document_ID
UG1399
Release_Date
2026-06-23
Version
2026.1 日本語

説明

ヒント: syn.directive.performance は、ループとループ ネストに適用され、パフォーマンスを決定するためには、既知のループ トリップカウントが必要です。ループに tripcount 変数が含まれる場合は、syn.directive.tripcount も指定する必要があります。

syn.directive.performance を使うと、target_titarget_tl といった高レベルの制約を指定できます。この指示子では、ループの連続開始間のクロック サイクル数を定義できます。さらに、ツールが目的を達成するために、UNROLL、PIPELINE、ARRAY_PARTITION、INLINE といった低レベルの指示子を自動的に推論します。syn.directive.performance で指定した値は必ず達成されるものではなく、目標値です。

target_ti は、ループの連続開始間の間隔です。つまり、ループの最初の反復が開始されてから、次の最初の反復が開始されるまでの間隔です。次の例では、target_ti=T は、L1 の連続する 2 回の反復間における、L2 ループ開始間隔の目標値です。

const int T = 100;
L1: for (int i=0; i<N; i++)
  L2: for (int j=0; j<M; j++){
   #pragma HLS PERFORMANCE target_ti=T
   ...
   }

この例では、L1 の 1 回の反復に対するループ L2 の目標完了時間は 100 サイクルです。

注記: syn.directive.inline は、II=1 を実現するパイプライン処理されたループ内の関数に自動的に適用され、スループットを向上させます。PERFORMANCE プラグマを適用すると、ツールは自動インライン最適化も実行します。また、II=1 のパイプラインを推論する指示子を適用した場合も、ツールは自動インライン最適化を実行します。特定の関数に対してこのインライン最適化をディスエーブルにするには、syn.directive.inline off を使用します。

トランザクション間隔は、ループの開始間隔 (II) に反復回数 (tripcount) を掛けた値 (target_ti = II * loop tripcount) になります。逆に、target_ti は FreqHz/毎秒ごとの演算になります。

たとえば、画像処理関数が 1 回の呼び出しで 1 フレームを処理し、スループット目標が 60 fps の場合、その関数の目標スループットは 1 秒あたり 60 回の呼び出しです。クロック周波数が 180 MHz の場合、target_ti は、関数呼び出しごとに 180M/60 なので、300 万クロックサイクルになります。

構文

ループの指示子を指定します。

syn.directive.performance=<location> [Options]

説明:

<location>function/loop_label 形式でループを指定します。

オプション

target_ti=<value>
反復を完了するためのループのクロック サイクル数として定義されたターゲット トランザクション間隔を指定します。

トランザクション間隔は、最初のループ トランザクションから次のループ トランザクションの開始までのクロック サイクル数です。<value> には、整数、浮動小数点数、または Vitis が整数として解釈する定数式を指定できます。

注記: 切り捨てが発生した場合、Vitis は警告メッセージを出力します。
target_tl=<value>

ループがすべての反復を完了するまでのクロック サイクル数として定義されるターゲット レイテンシを指定します。トランザクション レイテンシは、ループの最初の反復の開始から、最後の反復の完了までの間隔のことです。<value> には、整数、浮動小数点数、または Vitis が整数として解釈する定数式を指定できます。

unit=[sec | cycle]
target_ti または target_tl の値に対する単位を指定します。単位は秒かクロック サイクルで指定できます。値に単位を付加することで、ナノ秒 (ns)、ピコ秒 (ps)、マイクロ秒 (us) を指定できます。

例 1

loop_1 とラベルが付けられているループは、ターゲット トランザクション間隔を 4 クロック サイクルにするように指定されています。

syn.directive.performance=loop_1 target_ti=4

関連項目