## C Specification

To return information about a kernel object, call the function

cl_int clGetKernelSubGroupInfo(
cl_kernel kernel,
cl_device_id device,
cl_kernel_sub_group_info param_name,
size_t input_value_size,
const void* input_value,
size_t param_value_size,
void* param_value,
size_t* param_value_size_ret);

## Parameters

• kernel specifies the kernel object being queried.

• device identifies a specific device in the list of devices associated with kernel. The list of devices is the list of devices in the OpenCL context that is associated with kernel. If the list of devices associated with kernel is a single device, device can be a NULL value.

• param_name specifies the information to query. The list of supported param_name types and the information returned in param_value by clGetKernelSubGroupInfo is described in the Kernel Object Subgroup Queries table.

• input_value_size is used to specify the size in bytes of memory pointed to by input_value. This size must be == size of input type as described in the table below.

• input_value is a pointer to memory where the appropriate parameterization of the query is passed from. If input_value is NULL, it is ignored.

• param_value is a pointer to memory where the appropriate result being queried is returned. If param_value is NULL, it is ignored.

• param_value_size is used to specify the size in bytes of memory pointed to by param_value. This size must be ≥ size of return type as described in the Kernel Object Subgroup Queries table.

• param_value_size_ret returns the actual size in bytes of data being queried by param_name. If param_value_size_ret is NULL, it is ignored.

## Description

Table 1. List of supported param_names by https://www.khronos.org/registry/OpenCL/specs/2.2/html/OpenCL_API.html#clGetKernelSubGroupInfo
cl_kernel_sub_group_info Input Type Return Type Info. returned in param_value

CL_​KERNEL_​MAX_​SUB_​GROUP_​SIZE_​FOR_​NDRANGE

Missing before version 2.1. Also see extension cl_khr_subgroups.

size_t *

size_t

Returns the maximum sub-group size for this kernel. All sub-groups must be the same size, while the last subgroup in any work-group (i.e. the subgroup with the maximum index) could be the same or smaller size.

The input_value must be an array of size_t values corresponding to the local work size parameter of the intended dispatch. The number of dimensions in the ND-range will be inferred from the value specified for input_value_size.

CL_​KERNEL_​SUB_​GROUP_​COUNT_​FOR_​NDRANGE

Missing before version 2.1. Also see extension cl_khr_subgroups.

size_t *

size_t

Returns the number of sub-groups that will be present in each work-group for a given local work size. All workgroups, apart from the last work-group in each dimension in the presence of non-uniform work-group sizes, will have the same number of sub-groups.

The input_value must be an array of size_t values corresponding to the local work size parameter of the intended dispatch. The number of dimensions in the ND-range will be inferred from the value specified for input_value_size.

CL_​KERNEL_​LOCAL_​SIZE_​FOR_​SUB_​GROUP_​COUNT

Missing before version 2.1. Also see extension cl_khr_subgroups.

size_t

size_t[]

Returns the local size that will generate the requested number of sub-groups for the kernel. The output array must be an array of size_t values corresponding to the local size parameter. Any returned work-group will have one dimension. Other dimensions inferred from the value specified for param_value_size will be filled with the value 1. The returned value will produce an exact number of sub-groups and result in no partial groups for an executing kernel except in the case where the last work-group in a dimension has a size different from that of the other groups. If no work-group size can accommodate the requested number of sub-groups, 0 will be returned in each element of the return array.

CL_​KERNEL_​MAX_​NUM_​SUB_​GROUPS

Missing before version 2.1. Also see extension cl_khr_subgroups.

ignored

size_t

This provides a mechanism for the application to query the maximum number of sub-groups that may make up each work-group to execute a kernel on a specific device given by device. The OpenCL implementation uses the resource requirements of the kernel (register usage etc.) to determine what this work-group size should be. The returned value may be used to compute a work-group size to enqueue the kernel with to give a round number of sub-groups for an enqueue.

CL_​KERNEL_​COMPILE_​NUM_​SUB_​GROUPS

Missing before version 2.1. Also see extension cl_khr_subgroups.

ignored

size_t

Returns the number of sub-groups per work-group specified in the kernel source or IL. If the sub-group count is not specified then 0 is returned.

clGetKernelSubGroupInfo returns CL_​SUCCESS if the function is executed successfully. Otherwise, it returns one of the following errors:

• CL_​INVALID_​DEVICE if device is not in the list of devices associated with kernel or if device is NULL but there is more than one device associated with kernel.

• CL_​INVALID_​VALUE if param_name is not valid, or if size in bytes specified by param_value_size is < size of return type as described in the Kernel Object Subgroup Queries table and param_value is not NULL.

• CL_​INVALID_​VALUE if param_name is CL_​KERNEL_​MAX_​SUB_​GROUP_​SIZE_​FOR_​NDRANGE and the size in bytes specified by input_value_size is not valid or if input_value is NULL.

• CL_​INVALID_​KERNEL if kernel is a not a valid kernel object.

• CL_​OUT_​OF_​RESOURCES if there is a failure to allocate resources required by the OpenCL implementation on the device.

• CL_​OUT_​OF_​HOST_​MEMORY if there is a failure to allocate resources required by the OpenCL implementation on the host.