42 const T *in =
nullptr;
43 const std::size_t size;
44 const std::size_t dims;
45 const std::uint32_t WorkPI;
48 const Weights weights;
52 const std::size_t size_,
53 const std::size_t dims_,
54 const std::uint32_t WorkPI_,
55 const HistImpl &hist_,
57 const Weights &weights_)
58 : in(in_), size(size_), dims(dims_), WorkPI(WorkPI_), hist(hist_),
59 edges(edges_), weights(weights_)
63 void operator()(sycl::nd_item<1> item)
const
65 auto id = item.get_group_linear_id();
66 auto lid = item.get_local_linear_id();
67 auto group = item.get_group();
68 auto local_size = item.get_local_range(0);
73 if constexpr (HistImpl::sync_after_init || Edges::sync_after_init) {
74 sycl::group_barrier(group, sycl::memory_scope::work_group);
77 auto bounds = edges.get_bounds();
79 for (std::uint32_t i = 0; i < WorkPI; ++i) {
80 auto data_idx =
id * WorkPI * local_size + i * local_size + lid;
81 if (data_idx < size) {
82 auto *d = &in[data_idx * dims];
84 if (edges.in_bounds(d, bounds)) {
85 auto bin = edges.get_bin(item, d, bounds);
86 auto weight = weights.get(data_idx);
87 hist.add(item, bin, weight);
92 if constexpr (HistImpl::sync_before_finalize) {
93 sycl::group_barrier(group, sycl::memory_scope::work_group);