9

カーネルが呼び出すことができるように、OpenCL コードで独自の関数を定義することはできますか? はい、簡単な例をどこで見ることができますか?

4

4 に答える 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 に答える