説明
重要: これはコンパイラ ヒントであり、コンパイラにより無視される可能性があります。
オプションの __attribute__((vec_type_hint(<type>)))
は OpenCL 言語仕様の一部であり、カーネルの計算幅を表す OpenCL コンパイラへのヒントです。この設定は、コンパイラでコードを自動ベクター化しようとするときにプロセッサ帯域幅の使用率を計算する際のベースとなります。
デフォルトでは、カーネルに __attribute__((vec_type_hint(int)))
修飾子があるとして処理されます。これにより、異なるベクター化タイプを指定できます。
自動ベクター化では、コンパイラでワーク アイテムが結合または分離される状況に対応するため、カーネルから呼び出されたライブラリはランタイム時に再コンパイル可能であると想定されます。つまり、ライブラリはハード コードされたバイナリではないか、ハード コードされたバイナリの場合はソースまたはリターゲット可能な中間表記も提供されていることが必要です。これが、コード セキュリティの問題となる可能性もあります。
構文
カーネル定義の前、またはそのカーネル用に指定されたプライマリ関数の前に配置します。
__attribute__((vec_type_hint(<type>)))
説明:
- <type>: 次の表にリストされたビルトイン ベクターのいずれか、または構成スカラー要素のデータ型。 注記: 指定しない場合は、INT 型であると想定されます。
タイプ |
説明 |
---|---|
char<n> | <n> 個の 8 ビット符号付き 2 の補数整数値のベクター。 |
uchar<n> | <n> 個の 8 ビット符号なし整数値のベクター。 |
short<n> | <n> 個の 16 ビット符号付き 2 の補数整数値のベクター。 |
ushort<n> | <n> 個の 16 ビット符号なし整数値のベクター。 |
int<n> | <n> 個の 32 ビット符号付き 2 の補数整数値のベクター。 |
uint<n> | <n> 個の 32 ビット符号なし整数値のベクター。 |
long<n> | <n> 個の 64 ビット符号付き 2 の補数整数値のベクター。 |
ulong<n> | <n> 個の 64 ビット符号なし整数値のベクター。 |
float<n> | <n> 個の 32 ビット浮動小数点値のベクター。 |
double<n> | <n> 個の 64 ビット浮動小数点値のベクター。 |
注記: <n> を指定しない場合は、1 と想定されます。上記のベクター データ型名で <n> が 2、3、4、8、および 16 以外の値のものも、予約されています。つまり、<n> は 2、3、4、8、および 16 のみに指定できます。
例
次の例では、基本計算幅が 2 倍幅整数であると想定して自動ベクター化を実行しています。
#include <clc.h>
// For VHLS OpenCL C kernels, the full work group is synthesized
__attribute__((vec_type_hint(double)))
__attribute__ ((reqd_work_group_size(16, 1, 1)))
__kernel void
...