説明
重要: これはコンパイラ ヒントであり、コンパイラにより無視される可能性があります。
ループ展開は、Vitis コンパイラで使用可能な最適化手法です。ループ展開最適化は、コンパイラで同時処理が認識されるようにするために実行されます。認識された新たな同時処理により、レイテンシが削減され、パフォーマンスが向上しますが、より多くの FPGA ファブリック リソースを使用します。
OPENCL_UNROLL_HINT 属性は OpenCL 仕様の一部であり、Vitis コンパイラでループ (for
、while
、do
) が展開されるよう指定します。詳細は、ループ展開 を参照してください。
OPENCL_UNROLL_HINT 属性修飾子は、適用するループの直前に記述する必要があります。この属性では、ループの完全な展開、指定した量の部分展開、またはループ展開のディスエーブルを指定できます。
構文
OpenCL ソースのループ宣言の前に配置します。
__attribute__((opencl_unroll_hint(<n>)))
説明:
- <n>: オプションのループ展開係数。正の整数またはコンパイル時定数表現で指定します。1 にすると、ループ展開がディスエーブルになります。ヒント: <n> を指定しない場合、ループの展開係数はコンパイラにより自動的に決定されます。
例 1
次の例では、for
ループを係数 2 で展開しています。この結果、計算ユニットの 4 つの順次反復ではなく、2 つの並列ループ反復が生成されます。
__attribute__((opencl_unroll_hint(2)))
for(int i = 0; i < LENGTH; i++) {
bufc[i] = bufa[i] * bufb[i];
}
上記のループは、コンパイラにより次のコードに変換されます。
for(int i = 0; i < LENGTH; i+=2) {
bufc[i] = bufa[i] * bufb[i];
bufc[i+1] = bufa[i+1] * bufb[i+1];
}