Skip to content

Commit c0d3e83

Browse files
committed
Work item queries: use thread locals, some refactoring
1 parent 9342b37 commit c0d3e83

File tree

5 files changed

+57
-55
lines changed

5 files changed

+57
-55
lines changed

include/simsycl/detail/check.hh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ struct sink {
2727

2828
#if SIMSYCL_CHECK_MODE == SIMSYCL_CHECK_NONE
2929
#define SIMSYCL_CHECK_MSG(CONDITION, ...) \
30-
do { (void)(CONDITION); } while(0)
30+
do { simsycl::detail::sink{CONDITION, __VA_ARGS__}; } while(0)
3131
#elif SIMSYCL_CHECK_MODE == SIMSYCL_CHECK_LOG || SIMSYCL_CHECK_MODE == SIMSYCL_CHECK_THROW \
3232
|| SIMSYCL_CHECK_MODE == SIMSYCL_CHECK_ABORT
3333
#define SIMSYCL_CHECK_MSG(CONDITION, ...) \

include/simsycl/sycl.hh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,5 @@
4545
#include "sycl/usm.hh"
4646
#include "sycl/vec.hh"
4747

48-
#include "sycl/khr/sub_group_queries.hh"
48+
#include "sycl/khr/work_item_queries.hh"
4949
// IWYU pragma: end_keep

include/simsycl/sycl/khr/sub_group_queries.hh

Lines changed: 0 additions & 44 deletions
This file was deleted.
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#include <simsycl/sycl/group.hh>
2+
#include <simsycl/sycl/nd_item.hh>
3+
#include <simsycl/sycl/sub_group.hh>
4+
5+
namespace simsycl::sycl::khr {
6+
7+
#if SIMSYCL_ENABLE_SYCL_KHR_WORK_ITEM_QUERIES
8+
9+
namespace detail {
10+
template<int Dimensions>
11+
thread_local std::optional<simsycl::sycl::nd_item<Dimensions>> g_khr_wi_query_this_nd_item;
12+
13+
template<int Dimensions>
14+
thread_local std::optional<simsycl::sycl::group<Dimensions>> g_khr_wi_query_this_group;
15+
16+
inline thread_local std::optional<simsycl::sycl::sub_group> g_khr_wi_query_this_sub_group;
17+
18+
inline void khr_wi_query_check(bool val, [[maybe_unused]] const char *query_name) {
19+
SIMSYCL_CHECK_MSG(val,
20+
"Work item query state '%s' is not available.\n"
21+
"Make sure that the query originated from a kernel launched with a sycl::nd_range argument",
22+
query_name);
23+
}
24+
25+
} // namespace detail
26+
27+
template<int Dimensions>
28+
simsycl::sycl::nd_item<Dimensions> this_nd_item() {
29+
detail::khr_wi_query_check(detail::g_khr_wi_query_this_nd_item<Dimensions>.has_value(), "this_nd_item");
30+
return detail::g_khr_wi_query_this_nd_item<Dimensions>.value();
31+
}
32+
33+
template<int Dimensions>
34+
simsycl::sycl::group<Dimensions> this_group() {
35+
detail::khr_wi_query_check(detail::g_khr_wi_query_this_group<Dimensions>.has_value(), "this_group");
36+
return detail::g_khr_wi_query_this_group<Dimensions>.value();
37+
}
38+
39+
inline simsycl::sycl::sub_group this_sub_group() {
40+
detail::khr_wi_query_check(detail::g_khr_wi_query_this_sub_group.has_value(), "this_sub_group");
41+
return detail::g_khr_wi_query_this_sub_group.value();
42+
}
43+
44+
#endif // SIMSYCL_ENABLE_SYCL_KHR_WORK_ITEM_QUERIES
45+
46+
} // namespace simsycl::sycl::khr

src/simsycl/schedule.cc

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1+
2+
#include "simsycl/schedule.hh"
3+
#include "simsycl/detail/utils.hh"
4+
#include "simsycl/sycl/device.hh"
5+
#include "simsycl/sycl/exception.hh"
16
#include "simsycl/sycl/group.hh"
2-
#include "simsycl/sycl/khr/sub_group_queries.hh"
7+
#include "simsycl/sycl/group_functions.hh" // IWYU pragma: keep
8+
#include "simsycl/sycl/handler.hh" // IWYU pragma: keep
9+
#include "simsycl/sycl/khr/work_item_queries.hh"
310
#include "simsycl/sycl/nd_item.hh"
4-
5-
#include <simsycl/detail/utils.hh>
6-
#include <simsycl/schedule.hh>
7-
#include <simsycl/sycl/device.hh>
8-
#include <simsycl/sycl/exception.hh>
9-
#include <simsycl/sycl/group_functions.hh>
10-
#include <simsycl/sycl/handler.hh>
11-
#include <simsycl/system.hh>
11+
#include "simsycl/system.hh"
1212

1313
#include <numeric>
1414
#include <random>

0 commit comments

Comments
 (0)