~~NOTOC~~ ====== 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);