9template <
typename T,
typename Allocator = dr::mp::__detail::allocator<T>>
14 template <rng::input_range R>
15 void broadcast_data(std::size_t data_size, std::size_t root, R root_data,
17 if (_data !=
nullptr) {
20 _data_size = data_size;
21 _data = alloc.allocate(_data_size);
22 if (comm.rank() == root) {
24 __detail::sycl_copy(std::to_address(root_data.begin()),
25 std::to_address(root_data.end()), _data);
27 rng::copy(root_data.begin(), root_data.end(), _data);
30 comm.bcast(_data,
sizeof(T) * _data_size, root);
34 alloc.deallocate(_data, _data_size);
39 T &operator[](std::size_t
index) {
return _data[
index]; }
41 T *broadcasted_data() {
return _data; }
43 auto size() {
return _data_size; }
45 auto begin()
const {
return _data; }
46 auto end()
const {
return begin() + _data_size; }
50 std::size_t _data_size = 0;
Definition: communicator.hpp:13
Definition: broadcasted_vector.hpp:10