9.19. カーネル引数設定

9.19.1. clSetKernelArg

clSetKernelArg関数はkernelの特定の引数に対して引数値を設定。

注記

詳しくは「表:clSetKernelArg」(表B.81「表:clSetKernelArg」)を参照ください。

int org.jocl.CL.clSetKernelArg(
    cl_kernel kernel, //(1)
    int arg_index, //(2)
    long arg_size, //(3)
    Pointer arg_value) //(4)

(1)

有効なカーネルオブジェクトを指定。

(2)

引数の添字(インデックス)を指定。カーネルが宣言している引数の数をnとした場合、左端の引数を0で始めてn - 1 までの添字でカーネルの引数の番号を指定。

(3)

引数値のサイズを指定。引数がメモリオブジェクトの場合、サイズはバッファ・イメージオブジェクト型のサイズとなる必要がある。

(4)

arg_indexで指定した引数に、カーネルの引数値として渡したいデータへのポインタを指定。arg_valueが指す引数データは複製され、clSetKernelArg()が戻った後にアプリケーションはarg_valueポインタを再利用可能。

第4引数についてはプライベート、グローバルメモリで割り当てる場合はPointerオブジェクトを使いますが例外的にnullを渡すことがあります。以下のようにカーネル関数で引数をローカルメモリとする場合にnull値を使います。

__kernel void local_helloworld(__local uchar* foo)
{
        foo = 0xff;
        printf("%u", foo);
}

これに対応するclSetKernelArg関数は以下のようになります。

err = 0;
err |= clSetKernelArg(kernel, 0, Sizeof.cl_uchar, null);

Copyright 2018-2019, by Masaki Komatsu