カーネルが呼び出すことができるように、OpenCL コードで独自の関数を定義することはできますか? はい、簡単な例をどこで見ることができますか?
20772 次
4 に答える
13
プログラム作成に使用する機能は・・・
cl_program clCreateProgramWithSource (
cl_context context,
cl_uint count,
const char **strings,
const size_t *lengths,
cl_int *errcode_ret)
次のように、文字列パラメーター内に関数を配置できます。
float AddVector(float a, float b)
{
return a + b;
}
kernel void VectorAdd(
global read_only float* a,
global read_only float* b,
global write_only float* c )
{
int index = get_global_id(0);
//c[index] = a[index] + b[index];
c[index] = AddVector(a[index], b[index]);
}
これで、1 つのユーザー定義関数「AddVector」とカーネル関数「VectorAdd」ができました。
于 2010-08-01T23:42:10.330 に答える
5
ここにあるコード サンプルに基づいて、次のような関数を記述できます。
inline int add(int a,int b)
{
return a+b;
}
(たとえば、DXTC または bitonic ソートの例の .cl ファイルを見てください。)
それが nvidia のみの拡張機能かどうかはわかりませんが、OpenCL のドキュメントでは「補助機能」とカーネルについて説明しています。
于 2010-05-27T20:33:20.403 に答える
3
OpenCL は補助機能をサポートしています。例については、このリンクの19 ページを参照してください。
于 2010-05-27T21:10:46.947 に答える