24 static constexpr int root_rank{0};
26 static auto assign_process(
const int obj_tag) {
return obj_tag %
comm_size; }
28 const int tag, process_rank;
35 , process_rank(assign_process(tag))
38#ifdef SUANPAN_DISTRIBUTED
50 template<mpl_data_t DT> std::optional<mpl::irequest>
gather(
const Mat<DT>&
object) {
52 if(!
is_local)
return comm_world.irecv(
const_cast<DT*
>(
object.memptr()), mpl::contiguous_layout<DT>{
object.n_elem}, process_rank, mpl::tag_t{tag});
54 else if(
is_local)
return comm_world.isend(
object.memptr(), mpl::contiguous_layout<DT>{
object.n_elem}, root_rank, mpl::tag_t{tag});
59 template<
typename T>
static auto gather(
T&&) {}