42 template<
class Tkey,
class Tval>
44 sycl::queue &q, sycl::buffer<Tkey> &buf_key, sycl::buffer<Tval> &buf_values,
u32 len) {
48 template<
class Tkey,
class Tval>
50 const sham::DeviceScheduler_ptr &sched,
68 sycl::queue &q,
u32 len, Fct &&func) {
70 using ret_t =
typename std::invoke_result_t<Fct, u32>;
72 sycl::buffer<ret_t> ret(len);
74 q.submit([&](sycl::handler &cgh) {
75 sycl::accessor out{ret, cgh, sycl::write_only, sycl::no_init};
77 cgh.parallel_for(sycl::range<1>(len), [=](sycl::item<1> item) {
78 out[item] = func(item.get_linear_id());
82 return std::move(ret);
99 sycl::queue &q, sycl::buffer<T> &source_buf, sycl::buffer<u32> &index_map,
u32 len);
117 sycl::buffer<T> &source_buf,
118 sycl::buffer<u32> &index_map,
124 const sham::DeviceScheduler_ptr &sched,
132 const sham::DeviceScheduler_ptr &sched,
141 const sham::DeviceScheduler_ptr &sched_ptr,
153 const sham::DeviceScheduler_ptr &sched_ptr,
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_pow2_len(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_pow2_len(sycl::queue &q, sycl::buffer< Tkey > &buf_key, sycl::buffer< Tval > &buf_values, u32 len)
Sort key-value pairs using sycl::buffers (power-of-2 optimized).