私には2つの機能があります:
void sum1(short * a, short * b, short * res, int size);
void sum2(float * a, float * b, float * res, int size);
そして、私は単一の汎用カーネルを持っています
__kernel void sum(__global const T * a, __global const T * b, __global T * res, int size)
{
int x = get_global_id(0);
if (x < size) res[x] = a[x] + b[x];
}
コンパイル オプション -DT=short と -DT=float をそれぞれ指定して、上記の関数からこの汎用カーネルを呼び出すのは安全ですか? アラインメントを使用する必要がありますか、それとも OpenCL はこの場合、カーネル引数をそれぞれ 2 バイトと 4 バイトに自動的にアラインしますか?
一般に、cl_mem オブジェクトをカーネルに渡す場合、OpenCL はこの cl_mem オブジェクトに格納されているデータ型を認識せず、OpenCL が cl_mem オブジェクトをカーネル arg の適切なポインターに「変換」する方法を理解できました。