Skip to content

Commit b2de40e

Browse files
authored
[SYCL] Fix Kernel Compiler OpenCLC_Supports_Extension (#14959)
The optional parameter `VersionPtr` is `nullptr` by default. But, the code assumes it is a valid pointer. So, the fix is to guard with an `if` conditional phrase.
1 parent d6991cd commit b2de40e

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

sycl/source/detail/kernel_compiler/kernel_compiler_opencl.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,12 @@ bool OpenCLC_Supports_Extension(
340340
"trouble parsing query returned from CL_DEVICE_EXTENSIONS_WITH_VERSION "
341341
"- extension not followed by colon (:)");
342342
}
343+
344+
// Note that VersionPtr is an optional parameter in
345+
// ext_oneapi_supports_cl_extension().
346+
if (!VersionPtr)
347+
return true;
348+
343349
colon++; // move it forward
344350

345351
size_t space = ExtensionByVersionLog.find(' ', colon); // could be npos
@@ -360,7 +366,6 @@ bool OpenCLC_Supports_Extension(
360366
VersionPtr->major = std::stoi(versionVec[0]);
361367
VersionPtr->minor = std::stoi(versionVec[1]);
362368
VersionPtr->patch = std::stoi(versionVec[2]);
363-
364369
return true;
365370
}
366371

sycl/test-e2e/KernelCompiler/opencl_queries.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,26 @@ int main() {
4141
"version not updated");
4242
}
4343

44+
// test without version pointer
45+
bool has_bf16_conversion =
46+
d.ext_oneapi_supports_cl_extension("cl_intel_bf16_conversion");
47+
std::cout << "has_bf16_conversion: " << has_bf16_conversion << std::endl;
48+
bool has_subgroup_matrix_multiply_accumulate =
49+
d.ext_oneapi_supports_cl_extension(
50+
"cl_intel_subgroup_matrix_multiply_accumulate");
51+
std::cout << "has_subgroup_matrix_multiply_accumulate: "
52+
<< has_subgroup_matrix_multiply_accumulate << std::endl;
53+
bool has_subgroup_matrix_multiply_accumulate_tensor_float32 =
54+
d.ext_oneapi_supports_cl_extension(
55+
"cl_intel_subgroup_matrix_multiply_accumulate_tensor_float32");
56+
std::cout << "has_subgroup_matrix_multiply_accumulate_tensor_float32: "
57+
<< has_subgroup_matrix_multiply_accumulate_tensor_float32
58+
<< std::endl;
59+
bool has_subgroup_2d_block_io =
60+
d.ext_oneapi_supports_cl_extension("cl_intel_subgroup_2d_block_io");
61+
std::cout << "has_subgroup_2d_block_io: " << has_subgroup_2d_block_io
62+
<< std::endl;
63+
4464
// no supported devices support EMBEDDED_PROFILE at this time.
4565
assert(d.ext_oneapi_cl_profile() == "FULL_PROFILE" &&
4666
"unexpected cl_profile");

0 commit comments

Comments
 (0)