11// RUN: %{build} -o %t.out
22// RUN: %{run} %t.out
33//
4- // Fail is flaky for level_zero, enable when fixed.
5- // UNSUPPORTED: level_zero
6- //
7- // Consistently fails with opencl gpu, enable when fixed.
8- // XFAIL: opencl && gpu
9-
104// ==--- kernel_info.cpp - SYCL kernel info test ----------------------------==//
115//
126// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
1711
1812#include < cassert>
1913#include < sycl/detail/core.hpp>
14+ #include < sycl/ext/oneapi/get_kernel_info.hpp>
2015
2116using namespace sycl ;
17+ namespace syclex = sycl::ext::oneapi;
2218
2319int main () {
2420 queue q;
25-
21+ auto ctx = q. get_context ();
2622 buffer<int , 1 > buf (range<1 >(1 ));
2723 auto KernelID = sycl::get_kernel_id<class SingleTask >();
28- auto KB =
29- get_kernel_bundle<bundle_state::executable>(q.get_context (), {KernelID});
24+ auto KB = get_kernel_bundle<bundle_state::executable>(ctx, {KernelID});
3025 kernel krn = KB.get_kernel (KernelID);
3126
3227 q.submit ([&](handler &cgh) {
@@ -42,6 +37,10 @@ int main() {
4237 bool ExceptionWasThrown = false ;
4338 try {
4439 const cl_uint krnArgCount = krn.get_info <info::kernel::num_args>();
40+ // Use ext_oneapi_get_kernel_info extension and check that answers match.
41+ const cl_uint krnArgCountExt =
42+ syclex::get_kernel_info<SingleTask, info::kernel::num_args>(ctx);
43+ assert (krnArgCountExt == krnArgCount);
4544 } catch (exception &e) {
4645 ErrMsg = e.what ();
4746 Errc = e.code ();
@@ -59,8 +58,16 @@ int main() {
5958 assert (krnCtx == q.get_context ());
6059 const cl_uint krnRefCount = krn.get_info <info::kernel::reference_count>();
6160 assert (krnRefCount > 0 );
62- const std::string krnAttr = krn.get_info <info::kernel::attributes>();
63- assert (krnAttr.empty ());
61+
62+ // Use ext_oneapi_get_kernel_info extension and check that answers match.
63+ const context krnCtxExt =
64+ syclex::get_kernel_info<SingleTask, info::kernel::context>(ctx);
65+ assert (krnCtxExt == krnCtx);
66+ // Reference count might be different because we have to retain the kernel
67+ // handle first to fetch the info. So just check that it is not 0.
68+ const cl_uint krnRefCountExt =
69+ syclex::get_kernel_info<SingleTask, info::kernel::reference_count>(ctx);
70+ assert (krnRefCountExt > 0 );
6471
6572 device dev = q.get_device ();
6673 const size_t wgSize =
@@ -82,12 +89,42 @@ int main() {
8289 krn.get_info <info::kernel_device_specific::compile_num_sub_groups>(dev);
8390 assert (compileNumSg <= maxNumSg);
8491
92+ // Use ext_oneapi_get_kernel_info extension and check that answers match.
93+ const size_t wgSizeExt = syclex::get_kernel_info<
94+ SingleTask, info::kernel_device_specific::work_group_size>(ctx, dev);
95+ assert (wgSizeExt == wgSize);
96+ const size_t prefWGSizeMultExt = syclex::get_kernel_info<
97+ SingleTask,
98+ info::kernel_device_specific::preferred_work_group_size_multiple>(ctx,
99+ dev);
100+ assert (prefWGSizeMultExt == prefWGSizeMult);
101+ const cl_uint maxSgSizeExt = syclex::get_kernel_info<
102+ SingleTask, info::kernel_device_specific::max_sub_group_size>(ctx, dev);
103+ assert (maxSgSizeExt == maxSgSize);
104+ const cl_uint compileSgSizeExt = syclex::get_kernel_info<
105+ SingleTask, info::kernel_device_specific::compile_sub_group_size>(ctx,
106+ dev);
107+ assert (compileSgSizeExt == compileSgSize);
108+ const cl_uint maxNumSgExt = syclex::get_kernel_info<
109+ SingleTask, info::kernel_device_specific::max_num_sub_groups>(ctx, dev);
110+ assert (maxNumSgExt == maxNumSg);
111+ const cl_uint compileNumSgExt = syclex::get_kernel_info<
112+ SingleTask, info::kernel_device_specific::compile_num_sub_groups>(ctx,
113+ dev);
114+ assert (compileNumSgExt == compileNumSg);
115+
85116 {
86117 std::error_code Errc;
87118 std::string ErrMsg = " " ;
88119 bool IsExceptionThrown = false ;
89120 try {
90- krn.get_info <sycl::info::kernel_device_specific::global_work_size>(dev);
121+ auto globalWorkSize =
122+ krn.get_info <sycl::info::kernel_device_specific::global_work_size>(
123+ dev);
124+ // Use ext_oneapi_get_kernel_info extension and check that answers match.
125+ auto globalWorkSizeExt = syclex::get_kernel_info<
126+ SingleTask, info::kernel_device_specific::global_work_size>(ctx, dev);
127+ assert (globalWorkSize == globalWorkSizeExt);
91128 auto BuiltInIds = dev.get_info <info::device::built_in_kernel_ids>();
92129 bool isBuiltInKernel = std::find (BuiltInIds.begin (), BuiltInIds.end (),
93130 KernelID) != BuiltInIds.end ();
0 commit comments