Pass additional information other than argument values to a kernel.
cl_int clSetKernelExecInfo(cl_kernel kernel,
cl_kernel_exec_info param_name,
size_t param_value_size,
const void *param_value)kernel-
Specifies the kernel object being queried.
param_name-
Specifies the information to be passed to
kernel. The list of supportedparam_nametypes and the corresponding values passed inparam_valueis described in the table below. param_value_size-
Specifies the size in bytes of the memory pointed to by
param_value. param_value-
A pointer to memory where the appropriate values determined by
param_nameare specified.cl_kernel_exec_info Type and Description CL_KERNEL_EXEC_INFO_SVM_PTRSType: void *[]
SVM pointers used by a kernel which are not passed as arguments to
kernel. These addresses may be defined in SVM buffer(s) that are passed as arguments tokernel.These non-argument SVM pointers must be specified using
clSetKernelExecInfofor coarse-grain and fine-grain buffer SVM allocations but not for fine-grain system SVM allocations.CL_KERNEL_EXEC_INFO_SVM_- FINE_GRAIN_SYSTEMType: cl_bool
This flag indicates whether the kernel uses pointers that are fine grain system SVM allocations. These fine grain system SVM pointers may be passed as arguments or defined in SVM buffers that are passed as argumentsto
kernel.
1.
Coarse-grain or fine-grain buffer SVM pointers used by a kernel which are not passed as a kernel arguments must be specified using clSetKernelExecInfo with CL_KERNEL_EXEC_INFO_SVM_PTRS.
For example, if SVM buffer A contains a pointer to another SVM buffer B, and the kernel dereferences that pointer, then a pointer to B must either be passed as an argument in the call to that kernel or it must be made available to the kernel using clSetKernelExecInfo.
For example, we might pass extra SVM pointers as follows:
clSetKernelExecInfo(kernel,
CL_KERNEL_EXEC_INFO_SVM_PTRS,
num_ptrs * sizeof(void *),
extra_svm_ptr_list);
Here num_ptrs specifies the number of additional SVM pointers while extra_svm_ptr_list specifies a pointer to memory containing those SVM pointers.
When calling clSetKernelExecInfo with CL_KERNEL_EXEC_INFO_SVM_PTRS to specify pointers to non-argument SVM buffers as extra arguments to a kernel, each of these pointers can be the SVM pointer returned by clSVMAlloc or can be a pointer + offset into the SVM region.
It is sufficient to provide one pointer for each SVM buffer used.
2.
CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM is used to indicate whether SVM pointers used by a kernel will refer to system allocations or not.
CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM = CL_FALSE indicates that the OpenCL implementation may assume that system pointers are not passed as kernel arguments and are not stored inside SVM allocations passed as kernel arguments.
CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM = CL_TRUE indicates that the OpenCL implementation must assume that system pointers might be passed as kernel arguments and/or stored inside SVM allocations passed as kernel arguments.
In this case, if the device to which the kernel is enqueued does not support system SVM pointers, clEnqueueNDRangeKernel will return a CL_INVALID_OPERATION error.
If none of the devices in the context associated with kernel support fine-grain system SVM allocations, clSetKernelExecInfo will return a CL_INVALID_OPERATION error.
If clSetKernelExecInfo has not been called with a value for CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM the default value is used for this kernel attribute.
The defaule value depends on whether the device on which the kernel is enqueued supports fine-grain system SVM allocations.
If so, the default value used is CL_TRUE (system pointers might be passed); otherwise, the default is CL_FALSE.
3.
A call to clSetKernelExecInfo for a given value of param_name replaces any prior value passed for that value of param_name.
Only one param_value will be stored for each value of param_name.
Returns CL_SUCCESS if the function is executed successfully.
Otherwise, it returns one of the following errors:
-
CL_INVALID_KERNELifkernelis not a valid kernel object. -
CL_INVALID_VALUEifparam_nameis not valid, ifparam_valueis NULL or if the size specified byparam_value_sizeis not valid. -
CL_INVALID_OPERATIONifparam_name=CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEMandparam_value=CL_TRUEbut no devices in context associated withkernelsupport fine-grain system SVM allocations. -
CL_OUT_OF_RESOURCESif there is a failure to allocate resources required by the OpenCL implementation on the device. -
CL_OUT_OF_HOST_MEMORYif there is a failure to allocate resources required by the OpenCL implementation on the host.