Skip to content

Commit a4a5b08

Browse files
authored
Merge pull request #1849 from ayylol/cl-subgroupsizes
[OpenCL] Add extension check for sub group sizes query
2 parents 53d4433 + c6a85b0 commit a4a5b08

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

source/adapters/opencl/device.cpp

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -938,17 +938,28 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
938938
return UR_RESULT_SUCCESS;
939939
}
940940
case UR_DEVICE_INFO_SUB_GROUP_SIZES_INTEL: {
941-
// Have to convert size_t to uint32_t
942-
size_t SubGroupSizesSize = 0;
943-
CL_RETURN_ON_FAILURE(
944-
clGetDeviceInfo(cl_adapter::cast<cl_device_id>(hDevice), CLPropName, 0,
945-
nullptr, &SubGroupSizesSize));
946-
std::vector<size_t> SubGroupSizes(SubGroupSizesSize / sizeof(size_t));
947-
CL_RETURN_ON_FAILURE(
948-
clGetDeviceInfo(cl_adapter::cast<cl_device_id>(hDevice), CLPropName,
949-
SubGroupSizesSize, SubGroupSizes.data(), nullptr));
950-
return ReturnValue.template operator()<uint32_t>(SubGroupSizes.data(),
951-
SubGroupSizes.size());
941+
/* CL_DEVICE_SUB_GROUP_SIZES_INTEL is only supported if the device has the
942+
* cl_intel_required_subgroup_size extension.
943+
* */
944+
bool Supported = false;
945+
CL_RETURN_ON_FAILURE(cl_adapter::checkDeviceExtensions(
946+
cl_adapter::cast<cl_device_id>(hDevice),
947+
{"cl_intel_required_subgroup_size"}, Supported));
948+
if (Supported) {
949+
// Have to convert size_t to uint32_t
950+
size_t SubGroupSizesSize = 0;
951+
CL_RETURN_ON_FAILURE(
952+
clGetDeviceInfo(cl_adapter::cast<cl_device_id>(hDevice), CLPropName,
953+
0, nullptr, &SubGroupSizesSize));
954+
std::vector<size_t> SubGroupSizes(SubGroupSizesSize / sizeof(size_t));
955+
CL_RETURN_ON_FAILURE(
956+
clGetDeviceInfo(cl_adapter::cast<cl_device_id>(hDevice), CLPropName,
957+
SubGroupSizesSize, SubGroupSizes.data(), nullptr));
958+
return ReturnValue.template operator()<uint32_t>(SubGroupSizes.data(),
959+
SubGroupSizes.size());
960+
} else {
961+
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
962+
}
952963
}
953964
case UR_DEVICE_INFO_EXTENSIONS: {
954965
cl_device_id Dev = cl_adapter::cast<cl_device_id>(hDevice);

0 commit comments

Comments
 (0)