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)
有効なカーネルオブジェクトを指定。 | |
引数の添字(インデックス)を指定。カーネルが宣言している引数の数をnとした場合、左端の引数を0で始めてn - 1 までの添字でカーネルの引数の番号を指定。 | |
引数値のサイズを指定。引数がメモリオブジェクトの場合、サイズはバッファ・イメージオブジェクト型のサイズとなる必要がある。 | |
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