File indexing completed on 2026-07-26 08:22:12
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011
0012 #include "traccc/device/concepts/thread_id.hpp"
0013
0014
0015 #include <sycl/sycl.hpp>
0016
0017 namespace traccc::sycl::details {
0018
0019
0020 template <std::size_t DIMENSIONS>
0021 requires(DIMENSIONS >= 1 && DIMENSIONS <= 3)
0022 struct thread_id {
0023
0024 static constexpr std::size_t dimensions = DIMENSIONS;
0025
0026
0027
0028
0029
0030 explicit thread_id(const ::sycl::nd_item<dimensions>& item) : m_item(item) {}
0031
0032
0033
0034
0035 inline unsigned int getLocalThreadId() const {
0036 return static_cast<unsigned int>(m_item.get_local_linear_id());
0037 }
0038
0039 inline unsigned int getLocalThreadIdX() const {
0040 return static_cast<unsigned int>(m_item.get_local_id(0));
0041 }
0042
0043 inline unsigned int getGlobalThreadId() const {
0044 return static_cast<unsigned int>(m_item.get_global_linear_id());
0045 }
0046
0047 inline unsigned int getGlobalThreadIdX() const {
0048 return static_cast<unsigned int>(m_item.get_global_id(0));
0049 }
0050
0051 inline unsigned int getBlockIdX() const {
0052 return static_cast<unsigned int>(m_item.get_group(0));
0053 }
0054
0055 inline unsigned int getBlockDimX() const {
0056 return static_cast<unsigned int>(m_item.get_local_range(0));
0057 }
0058
0059 inline unsigned int getGridDimX() const {
0060 return static_cast<unsigned int>(m_item.get_global_range(0));
0061 }
0062
0063
0064
0065 private:
0066
0067 const ::sycl::nd_item<dimensions>& m_item;
0068
0069 };
0070
0071
0072 template <int N>
0073 thread_id(::sycl::nd_item<N>) -> thread_id<N>;
0074
0075
0076
0077 static_assert(traccc::device::concepts::thread_id1<thread_id<1>>);
0078 static_assert(traccc::device::concepts::thread_id1<thread_id<2>>);
0079 static_assert(traccc::device::concepts::thread_id1<thread_id<3>>);
0080
0081 }