Skip to content

Commit 3c58917

Browse files
committed
rest
1 parent aa1cc9e commit 3c58917

File tree

4 files changed

+45
-0
lines changed

4 files changed

+45
-0
lines changed

sycl/include/sycl/info/aspects.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,5 @@ __SYCL_ASPECT(ext_oneapi_async_memory_alloc, 87)
8080
__SYCL_ASPECT(ext_intel_device_info_luid, 88)
8181
__SYCL_ASPECT(ext_intel_device_info_node_mask, 89)
8282
__SYCL_ASPECT(ext_oneapi_exportable_device_mem, 90)
83+
__SYCL_ASPECT(ext_oneapi_clock, 91)
8384

sycl/source/detail/device_impl.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1579,6 +1579,9 @@ class device_impl : public std::enable_shared_from_this<device_impl> {
15791579
UR_DEVICE_INFO_MEMORY_EXPORT_EXPORTABLE_DEVICE_MEM_EXP>()
15801580
.value_or(0);
15811581
}
1582+
CASE(ext_oneapi_clock) {
1583+
return has_extension("cl_khr_kernel_clock");
1584+
}
15821585
else {
15831586
return false; // This device aspect has not been implemented yet.
15841587
}

sycl/source/feature_test.hpp.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ inline namespace _V1 {
120120
#define SYCL_KHR_FREE_FUNCTION_COMMANDS 1
121121
#define SYCL_KHR_QUEUE_EMPTY_QUERY 1
122122
#define SYCL_EXT_ONEAPI_MEMORY_EXPORT 1
123+
#define SYCL_EXT_ONEAPI_CLOCK 1
123124
// In progress yet
124125
#define SYCL_EXT_ONEAPI_ATOMIC16 0
125126
#define SYCL_KHR_DEFAULT_CONTEXT 1
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// REQUIRES: ext_oneapi_clock
2+
3+
#include <sycl/detail/core.hpp>
4+
#include <sycl/ext/oneapi/experimental/clock.hpp>
5+
#include <sycl/usm.hpp>
6+
7+
int main() {
8+
sycl::queue q;
9+
uint64_t *data = sycl::malloc_shared<uint64_t>(3, q);
10+
11+
q.single_task([=]() {
12+
uint64_t sg_clock_start = sycl::ext::oneapi::experimental::clock(
13+
sycl::ext::oneapi::experimental::clock_scope::sub_group);
14+
uint64_t wg_clock_start = sycl::ext::oneapi::experimental::clock(
15+
sycl::ext::oneapi::experimental::clock_scope::work_group);
16+
uint64_t dev_clock_start = sycl::ext::oneapi::experimental::clock(
17+
sycl::ext::oneapi::experimental::clock_scope::device);
18+
19+
int count = 0;
20+
for (int i = 0; i < 1e6; ++i)
21+
count++;
22+
23+
uint64_t sg_clock_end = sycl::ext::oneapi::experimental::clock(
24+
sycl::ext::oneapi::experimental::clock_scope::sub_group);
25+
uint64_t wg_clock_end = sycl::ext::oneapi::experimental::clock(
26+
sycl::ext::oneapi::experimental::clock_scope::work_group);
27+
uint64_t dev_clock_end = sycl::ext::oneapi::experimental::clock(
28+
sycl::ext::oneapi::experimental::clock_scope::device);
29+
data[0] = sg_clock_end - sg_clock_start;
30+
data[1] = wg_clock_end - wg_clock_start;
31+
data[2] = dev_clock_end - dev_clock_start;
32+
});
33+
q.wait();
34+
35+
assert(data[0] > 0);
36+
assert(data[1] > 0);
37+
assert(data[2] > 0);
38+
39+
return 0;
40+
}

0 commit comments

Comments
 (0)