58 MPI_Comm comm,
MpiLock* mpi_lock,
74 void broadcast(
void* buf,
Int64 nb_elem,
Int32 root, MPI_Datatype datatype);
75 void allGather(
const void* send_buf,
void* recv_buf,
76 Int64 nb_elem, MPI_Datatype datatype);
77 void gather(
const void* send_buf,
void* recv_buf,
78 Int64 nb_elem,
Int32 root, MPI_Datatype datatype);
79 void allGatherVariable(
const void* send_buf,
void* recv_buf,
const int* recv_counts,
80 const int* recv_indexes,
Int64 nb_elem, MPI_Datatype datatype);
81 void gatherVariable(
const void* send_buf,
void* recv_buf,
const int* recv_counts,
82 const int* recv_indexes,
Int64 nb_elem,
Int32 root, MPI_Datatype datatype);
83 void scatterVariable(
const void* send_buf,
const int* send_count,
const int* send_indexes,
84 void* recv_buf,
Int64 nb_elem,
Int32 root, MPI_Datatype datatype);
85 void allToAll(
const void* send_buf,
void* recv_buf,
Int32 count, MPI_Datatype datatype);
86 void allToAllVariable(
const void* send_buf,
const int* send_counts,
87 const int* send_indexes,
void* recv_buf,
const int* recv_counts,
88 const int* recv_indexes, MPI_Datatype datatype);
89 void reduce(
const void* send_buf,
void* recv_buf,
Int64 count, MPI_Datatype datatype, MPI_Op op,
Int32 root);
90 void allReduce(
const void* send_buf,
void* recv_buf,
Int64 count, MPI_Datatype datatype, MPI_Op op);
91 void scan(
const void* send_buf,
void* recv_buf,
Int64 count, MPI_Datatype datatype, MPI_Op op);
92 void scanExclusive(
const void* send_buf,
void* recv_buf,
Int64 count, MPI_Datatype datatype, MPI_Op op);
93 void directSendRecv(
const void* send_buffer,
Int64 send_buffer_size,
94 void* recv_buffer,
Int64 recv_buffer_size,
95 Int32 proc,
Int64 elem_size, MPI_Datatype data_type);
97 Request directSend(
const void* send_buffer,
Int64 send_buffer_size,
98 Int32 proc,
Int64 elem_size, MPI_Datatype data_type,
99 int mpi_tag,
bool is_blocked);
103 Int32 proc, MPI_Datatype data_type,
int mpi_tag);
105 Request directRecv(
void* recv_buffer,
Int64 recv_buffer_size,
106 Int32 source_rank,
Int64 elem_size, MPI_Datatype data_type,
107 int mpi_tag,
bool is_blocked);
111 Int32 source_rank, MPI_Datatype data_type,
int mpi_tag);
113 Request directSendPack(
const void* send_buffer,
Int64 send_buffer_size,
114 Int32 proc,
int mpi_tag,
bool is_blocked);
122 Request directRecv(
void* recv_buffer,
Int64 recv_buffer_size,
126 Request directRecvPack(
void* recv_buffer,
Int64 recv_buffer_size,
127 Int32 proc,
int mpi_tag,
bool is_blocking);
140 bool is_non_blocking);
156 void freeRequest(
Request& request);
157 bool testRequest(
Request& request);
159 void enableDebugRequest(
bool enable_debug_request);
161 MpiLock* mpiLock()
const {
return m_mpi_lock; }
163 Request nonBlockingBroadcast(
void* buf,
Int64 nb_elem,
Int32 root, MPI_Datatype datatype);
164 Request nonBlockingAllGather(
const void* send_buf,
void* recv_buf,
Int64 nb_elem, MPI_Datatype datatype);
165 Request nonBlockingGather(
const void* send_buf,
void* recv_buf,
Int64 nb_elem,
Int32 root, MPI_Datatype datatype);
167 Request nonBlockingAllToAll(
const void* send_buf,
void* recv_buf,
Int32 count, MPI_Datatype datatype);
168 Request nonBlockingAllReduce(
const void* send_buf,
void* recv_buf,
Int64 count, MPI_Datatype datatype, MPI_Op op);
169 Request nonBlockingAllToAllVariable(
const void* send_buf,
const int* send_counts,
170 const int* send_indexes,
void* recv_buf,
const int* recv_counts,
171 const int* recv_indexes, MPI_Datatype datatype);
176 int toMPISize(
Int64 count);
179 Request buildRequest(
int ret, MPI_Request request);
184 void setRequestErrorAreFatal(
bool v);
185 bool isRequestErrorAreFatal()
const;
188 void setPrintRequestError(
bool v);
189 bool isPrintRequestError()
const;
193 bool isTraceMPIMessage()
const {
return m_is_trace; }
200 void setCheckRequest(
bool v);
201 bool isCheckRequest()
const;
215 bool isAllowNullRankForAnySource()
const {
return m_is_allow_null_rank_for_any_source; }
219 void initializeWindowCreator(MPI_Comm comm_machine);
220 MpiMachineShMemWinBaseInternalCreator* windowCreator()
const;
224 IStat* m_stat =
nullptr;
225 MpiLock* m_mpi_lock =
nullptr;
226 IMpiProfiling* m_mpi_prof =
nullptr;
227 ITimeMetricCollector* m_metric_collector =
nullptr;
229 int m_comm_rank = A_PROC_NULL_RANK;
231 Int64 m_nb_all_reduce = 0;
232 Int64 m_nb_reduce = 0;
233 bool m_is_trace =
false;
237 MPI_Request m_empty_request2;
238 int m_recv_buffer_for_empty_request[1];
239 int m_send_buffer_for_empty_request2[1];
240 int m_recv_buffer_for_empty_request2[1];
247 bool m_is_allow_null_rank_for_any_source =
true;
253 void _trace(
const char* function);
256 void _checkFatalInRequest();
261 void _checkHasNoRequests();