Die Funktion setzt Parameter für den Kernel.
cl_int clSetKernelArg ( cl_kernel kernel, cl_uint arg_index, size_t arg_size, const void *arg_value)
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.
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. |
// 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);