clSetKernelArg

Die Funktion setzt Parameter für den Kernel.

Signatur

cl_int clSetKernelArg ( cl_kernel kernel,
                        cl_uint arg_index,
                        size_t arg_size,
                        const void *arg_value)

Parameter

kernel: Das Kernel-Objekt für das ein Argument gesetzt werden soll.

arg_index: Index des Arguments. Indizes starten von 0 bis n-1 mit n der Gesamtanzahl Argumente, die für den Kernel definiert wurden.

arg_size: Die Größe / Länge des Argument-Wertes.

arg_value: Zeiger auf die Daetn, die als Argument fpür den Kernel benutzt werden sollen. Die Argumentdaten werden kopiert, so kann der Zeiger wiederbenutzt werden, nachdem clSetKernelArg zurückgekehrt ist. Wenn das Argument ein Speicherobjekt sein soll, dann ist arg_value ein Zeiger auf das Buffer-Objekt.

Rückgabewert

Zurückgegeben wird einer der folgenden Fehlercodes:

Wert Beschreibung
CL_SUCCESS Die Funktion wird erfolgreich ausgeführt
CL_INVALID_KERNEL kernel ist kein gültiges Kernel-Objekt
CL_INVALID_ARG_INDEX arg_index ist kein gültiger Argument-Index
CL_INVALID_MEM_OBJECT Argument soll Speicherobjekt sein, arg_value ist aber kein gültiges Speicherobjekt
CL_INVALID_SAMPLER Argument soll vom Typ sampler_t sein, arg_value ist aber kein gültiges Sampler-Objekt
CL_INVALID_ARG_SIZE arg_size stimmt nicht mit der Größe des Parameters überein; wenn das Argument ein Speicherobjekt ist, dann ist arg_size nicht sizeof(cl_mem) oder arg_size ist 0 aber das Argument ist durch __local-Qualifier definiert.
CL_INVALID_ARG_VALUE
CL_OUT_OF_RESOURCES Es ist ein Fehler beim Reservieren von Speicher aufgetreten, der für die OpenCL-Implementation auf dem Gerät gebraucht wird.
CL_OUT_OF_HOST_MEMORY Es ist ein Fehler beim Reservieren von Speicher aufgetreten, der für die OpenCL-Implementation auf dem Hostprozressor gebraucht wird.

Beispiel

// source_str="__kernel void mfunc(int *a, int *b, int *c) { ... }";
// kernel=clCreateKernel( ... )
// a_mem_obj=clCreateBuffer(...)
 
int ret=0;
ret = clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&a_mem_obj);
ret = clSetKernelArg(kernel, 1, sizeof(cl_mem), (void *)&b_mem_obj);
ret = clSetKernelArg(kernel, 2, sizeof(cl_mem), (void *)&c_mem_obj);