演算子数の制限 - 2023.2 日本語

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

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語

デフォルトでは Vitis HLS はまずパフォーマンスを最大限にしようとするため、場合によっては、明示的に演算子の数を制限してエリア削減する必要があります。デザインの演算子数を制限する方法はエリア削減には効率的な方法で、演算を共有させるとエリアが削減しやすくなりますが、パフォーマンスが落ちる可能性があります。

ALLOCATION 指示子を使用すると、デザインで使用される演算子の数を制限できます。たとえば、foo というデザインには 317 個の乗算が含まれるのに、FPGA には 256 個の乗算器リソース (DSP マクロセル) しかないとします。次の ALLOCATION プラグマを使用すると、Vitis HLS で最大 256 個の乗算 (mul) 演算子を含むデザインが作成されます。

dout_t array_arith (dio_t d[317]) {
 static int acc;
 int i;
#pragma HLS ALLOCATION instances=fmul limit=256 operation

 for (i=0;i<317;i++) {
#pragma HLS UNROLL
 acc += acc * d[i];
 }
 rerun acc;
}
注記: ALLOCATION 制限を必要な数よりも大きな値に指定すると、Vitis HLS ではその制限で指定されたリソース数を使用するか、必要な最大数を使用しようとするので、共有される量が減ります。

type オプションを使用すると、ALLOCATION 指示子で演算、インプリメンテーション、または関数を制限するかどうかを指定できます。次の表に、ALLOCATION 指示子を使用して制御可能なすべての演算をリストします。

注記: 次にリストされている演算は、ALLOCATION プラグマまたは指示子でサポートされます。BIND_OP プラグマまたは指示子では、コマンド構文で説明するように、演算子のサブセットがサポートされます。
表 1. Vitis HLS の演算子
演算子 説明
add 整数の加算
ashr 四則演算右シフト
dadd 倍精度浮動小数点の加算
dcmp 倍精度浮動小数点の比較
ddiv 倍精度浮動小数点の除算
dmul 倍精度浮動小数点の乗算
drecip 倍精度浮動小数点の逆数
drem 倍精度浮動小数点の剰余
drsqrt 倍精度浮動小数点の逆数平方根
dsub 倍精度浮動小数点の減算
dsqrt 倍精度浮動小数点の平方根
fadd 単精度浮動小数点の加算
fcmp 単精度浮動小数点の比較
fdiv 単精度浮動小数点の除算
fmul 単精度浮動小数点の乗算
frecip 単精度浮動小数点の逆数
frem 単精度浮動小数点の剰余
frsqrt 単精度浮動小数点の逆数平方根
fsub 単精度浮動小数点の減算
fsqrt 単精度浮動小数点の平方根
icmp 整数の比較
lshr 論理演算右シフト
mul 乗算
sdiv 符号付き除算
shl 左シフト
srem 符号付き剰余
sub 減算
udiv 符号なし除算
urem 符号なし剰余