40 template<
class Tkey,
class Tval>
42 sycl::queue &q, sycl::buffer<Tkey> &buf_key, sycl::buffer<Tval> &buf_values,
u32 len) {
46 template<
class Tkey,
class Tval>
48 const sham::DeviceScheduler_ptr &sched,
66 sycl::queue &q,
u32 len, Fct &&func) {
68 using ret_t =
typename std::invoke_result_t<Fct, u32>;
70 sycl::buffer<ret_t> ret(len);
72 q.submit([&](sycl::handler &cgh) {
73 sycl::accessor out{ret, cgh, sycl::write_only, sycl::no_init};
75 cgh.parallel_for(sycl::range<1>(len), [=](sycl::item<1> item) {
76 out[item] = func(item.get_linear_id());
80 return std::move(ret);
97 sycl::queue &q, sycl::buffer<T> &source_buf, sycl::buffer<u32> &index_map,
u32 len);
115 sycl::buffer<T> &source_buf,
116 sycl::buffer<u32> &index_map,
122 const sham::DeviceScheduler_ptr &sched,
130 const sham::DeviceScheduler_ptr &sched,
139 const sham::DeviceScheduler_ptr &sched_ptr,
145 index_remap<T>(sched_ptr, source, dest, index_map, len);
151 const sham::DeviceScheduler_ptr &sched_ptr,
158 index_remap_nvar<T>(sched_ptr, source, dest, index_map, len, nvar);
std::uint32_t u32
32 bit unsigned integer
A buffer allocated in USM (Unified Shared Memory)
namespace to store algorithms implemented by shamalgs
sycl::buffer< T > index_remap(sycl::queue &q, sycl::buffer< T > &source_buf, sycl::buffer< u32 > &index_map, u32 len)
remap a buffer according to a given index map result[i] = result[index_map[i]]
sycl::buffer< u32 > gen_buffer_index(sycl::queue &q, u32 len)
generate a buffer such that for i in [0,len[, buf[i] = i
sycl::buffer< T > index_remap_nvar(sycl::queue &q, sycl::buffer< T > &source_buf, sycl::buffer< u32 > &index_map, u32 len, u32 nvar)
remap a buffer (with multiple variable per index) according to a given index map result[i] = result[i...
sycl::buffer< typename std::invoke_result_t< Fct, u32 > > gen_buffer_device(sycl::queue &q, u32 len, Fct &&func)
generate a buffer from a lambda expression based on the indexes
void sort_by_key(sycl::queue &q, sycl::buffer< Tkey > &buf_key, sycl::buffer< Tval > &buf_values, u32 len)
Sort the buffer according to the key order.
void sort_by_key(sycl::queue &q, sycl::buffer< Tkey > &buf_key, sycl::buffer< Tval > &buf_values, u32 len)
Sort key-value pairs using sycl::buffers.