1 /*
2  * Copyright (C) by Argonne National Laboratory
3  *     See COPYRIGHT in top-level directory
4  */
5 
6 /* ch4 netmod functions */
7 #ifndef NETMOD_H_INCLUDED
8 #define NETMOD_H_INCLUDED
9 
10 #include <mpidimpl.h>
11 
12 #define MPIDI_MAX_NETMOD_STRING_LEN 64
13 
14 typedef union {
15 #ifdef HAVE_CH4_NETMOD_OFI
16     MPIDI_OFI_Global_t ofi;
17 #endif
18 #ifdef HAVE_CH4_NETMOD_UCX
19     MPIDI_UCX_Global_t ucx;
20 #endif
21 } MPIDI_NM_Global_t;
22 
23 typedef int (*MPIDI_NM_mpi_init_t) (int rank, int size, int appnum, int *tag_bits,
24                                     MPIR_Comm * init_comm);
25 typedef int (*MPIDI_NM_mpi_finalize_t) (void);
26 typedef int (*MPIDI_NM_post_init_t) (void);
27 typedef int (*MPIDI_NM_get_vci_attr_t) (int vci);
28 typedef int (*MPIDI_NM_progress_t) (int vci, int blocking);
29 typedef int (*MPIDI_NM_mpi_comm_connect_t) (const char *port_name, MPIR_Info * info, int root,
30                                             int timeout, MPIR_Comm * comm,
31                                             MPIR_Comm ** newcomm_ptr);
32 typedef int (*MPIDI_NM_mpi_comm_disconnect_t) (MPIR_Comm * comm_ptr);
33 typedef int (*MPIDI_NM_mpi_open_port_t) (MPIR_Info * info_ptr, char *port_name);
34 typedef int (*MPIDI_NM_mpi_close_port_t) (const char *port_name);
35 typedef int (*MPIDI_NM_mpi_comm_accept_t) (const char *port_name, MPIR_Info * info, int root,
36                                            MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr);
37 typedef int (*MPIDI_NM_am_send_hdr_t) (int rank, MPIR_Comm * comm, int handler_id,
38                                        const void *am_hdr, size_t am_hdr_sz);
39 typedef int (*MPIDI_NM_am_isend_t) (int rank, MPIR_Comm * comm, int handler_id, const void *am_hdr,
40                                     size_t am_hdr_sz, const void *data, MPI_Count count,
41                                     MPI_Datatype datatype, MPIR_Request * sreq);
42 typedef int (*MPIDI_NM_am_isendv_t) (int rank, MPIR_Comm * comm, int handler_id,
43                                      struct iovec * am_hdrs, size_t iov_len, const void *data,
44                                      MPI_Count count, MPI_Datatype datatype, MPIR_Request * sreq);
45 typedef int (*MPIDI_NM_am_send_hdr_reply_t) (MPIR_Context_id_t context_id, int src_rank,
46                                              int handler_id, const void *am_hdr, size_t am_hdr_sz);
47 typedef int (*MPIDI_NM_am_isend_reply_t) (MPIR_Context_id_t context_id, int src_rank,
48                                           int handler_id, const void *am_hdr, size_t am_hdr_sz,
49                                           const void *data, MPI_Count count, MPI_Datatype datatype,
50                                           MPIR_Request * sreq);
51 typedef size_t(*MPIDI_NM_am_hdr_max_sz_t) (void);
52 typedef size_t(*MPIDI_NM_am_eager_limit_t) (void);
53 typedef size_t(*MPIDI_NM_am_eager_buf_limit_t) (void);
54 typedef int (*MPIDI_NM_comm_get_lpid_t) (MPIR_Comm * comm_ptr, int idx, int *lpid_ptr,
55                                          bool is_remote);
56 typedef int (*MPIDI_NM_get_local_upids_t) (MPIR_Comm * comm, size_t ** local_upid_size,
57                                            char **local_upids);
58 typedef int (*MPIDI_NM_upids_to_lupids_t) (int size, size_t * remote_upid_size, char *remote_upids,
59                                            int **remote_lupids);
60 typedef int (*MPIDI_NM_create_intercomm_from_lpids_t) (MPIR_Comm * newcomm_ptr, int size,
61                                                        const int lpids[]);
62 typedef int (*MPIDI_NM_mpi_comm_commit_pre_hook_t) (MPIR_Comm * comm);
63 typedef int (*MPIDI_NM_mpi_comm_commit_post_hook_t) (MPIR_Comm * comm);
64 typedef int (*MPIDI_NM_mpi_comm_free_hook_t) (MPIR_Comm * comm);
65 typedef int (*MPIDI_NM_mpi_win_create_hook_t) (MPIR_Win * win);
66 typedef int (*MPIDI_NM_mpi_win_allocate_hook_t) (MPIR_Win * win);
67 typedef int (*MPIDI_NM_mpi_win_allocate_shared_hook_t) (MPIR_Win * win);
68 typedef int (*MPIDI_NM_mpi_win_create_dynamic_hook_t) (MPIR_Win * win);
69 typedef int (*MPIDI_NM_mpi_win_attach_hook_t) (MPIR_Win * win, void *base, MPI_Aint size);
70 typedef int (*MPIDI_NM_mpi_win_detach_hook_t) (MPIR_Win * win, const void *base);
71 typedef int (*MPIDI_NM_mpi_win_free_hook_t) (MPIR_Win * win);
72 typedef int (*MPIDI_NM_rma_win_cmpl_hook_t) (MPIR_Win * win);
73 typedef int (*MPIDI_NM_rma_win_local_cmpl_hook_t) (MPIR_Win * win);
74 typedef int (*MPIDI_NM_rma_target_cmpl_hook_t) (int rank, MPIR_Win * win);
75 typedef int (*MPIDI_NM_rma_target_local_cmpl_hook_t) (int rank, MPIR_Win * win);
76 typedef void (*MPIDI_NM_am_request_init_t) (MPIR_Request * req);
77 typedef void (*MPIDI_NM_am_request_finalize_t) (MPIR_Request * req);
78 typedef int (*MPIDI_NM_mpi_send_t) (const void *buf, MPI_Aint count, MPI_Datatype datatype,
79                                     int rank, int tag, MPIR_Comm * comm, int context_offset,
80                                     MPIDI_av_entry_t * addr, MPIR_Request ** request);
81 typedef int (*MPIDI_NM_send_coll_t) (const void *buf, MPI_Aint count, MPI_Datatype datatype,
82                                      int rank, int tag, MPIR_Comm * comm, int context_offset,
83                                      MPIDI_av_entry_t * addr, MPIR_Request ** request,
84                                      MPIR_Errflag_t * errflag);
85 typedef int (*MPIDI_NM_mpi_ssend_t) (const void *buf, MPI_Aint count, MPI_Datatype datatype,
86                                      int rank, int tag, MPIR_Comm * comm, int context_offset,
87                                      MPIDI_av_entry_t * addr, MPIR_Request ** request);
88 typedef int (*MPIDI_NM_mpi_isend_t) (const void *buf, MPI_Aint count, MPI_Datatype datatype,
89                                      int rank, int tag, MPIR_Comm * comm, int context_offset,
90                                      MPIDI_av_entry_t * addr, MPIR_Request ** request);
91 typedef int (*MPIDI_NM_isend_coll_t) (const void *buf, MPI_Aint count, MPI_Datatype datatype,
92                                       int rank, int tag, MPIR_Comm * comm, int context_offset,
93                                       MPIDI_av_entry_t * addr, MPIR_Request ** request,
94                                       MPIR_Errflag_t * errflag);
95 typedef int (*MPIDI_NM_mpi_issend_t) (const void *buf, MPI_Aint count, MPI_Datatype datatype,
96                                       int rank, int tag, MPIR_Comm * comm, int context_offset,
97                                       MPIDI_av_entry_t * addr, MPIR_Request ** request);
98 typedef int (*MPIDI_NM_mpi_cancel_send_t) (MPIR_Request * sreq);
99 typedef int (*MPIDI_NM_mpi_recv_t) (void *buf, MPI_Aint count, MPI_Datatype datatype, int rank,
100                                     int tag, MPIR_Comm * comm, int context_offset,
101                                     MPIDI_av_entry_t * addr, MPI_Status * status,
102                                     MPIR_Request ** request);
103 typedef int (*MPIDI_NM_mpi_irecv_t) (void *buf, MPI_Aint count, MPI_Datatype datatype, int rank,
104                                      int tag, MPIR_Comm * comm, int context_offset,
105                                      MPIDI_av_entry_t * addr, MPIR_Request ** request,
106                                      MPIR_Request * partner);
107 typedef int (*MPIDI_NM_mpi_imrecv_t) (void *buf, MPI_Aint count, MPI_Datatype datatype,
108                                       MPIR_Request * message);
109 typedef int (*MPIDI_NM_mpi_cancel_recv_t) (MPIR_Request * rreq);
110 typedef void *(*MPIDI_NM_mpi_alloc_mem_t) (size_t size, MPIR_Info * info_ptr);
111 typedef int (*MPIDI_NM_mpi_free_mem_t) (void *ptr);
112 typedef int (*MPIDI_NM_mpi_improbe_t) (int source, int tag, MPIR_Comm * comm, int context_offset,
113                                        MPIDI_av_entry_t * addr, int *flag, MPIR_Request ** message,
114                                        MPI_Status * status);
115 typedef int (*MPIDI_NM_mpi_iprobe_t) (int source, int tag, MPIR_Comm * comm, int context_offset,
116                                       MPIDI_av_entry_t * addr, int *flag, MPI_Status * status);
117 typedef int (*MPIDI_NM_mpi_win_set_info_t) (MPIR_Win * win, MPIR_Info * info);
118 typedef int (*MPIDI_NM_mpi_win_shared_query_t) (MPIR_Win * win, int rank, MPI_Aint * size,
119                                                 int *disp_unit, void *baseptr);
120 typedef int (*MPIDI_NM_mpi_put_t) (const void *origin_addr, int origin_count,
121                                    MPI_Datatype origin_datatype, int target_rank,
122                                    MPI_Aint target_disp, int target_count,
123                                    MPI_Datatype target_datatype, MPIR_Win * win,
124                                    MPIDI_av_entry_t * addr, MPIDI_winattr_t winattr);
125 typedef int (*MPIDI_NM_mpi_win_start_t) (MPIR_Group * group, int assert, MPIR_Win * win);
126 typedef int (*MPIDI_NM_mpi_win_complete_t) (MPIR_Win * win);
127 typedef int (*MPIDI_NM_mpi_win_post_t) (MPIR_Group * group, int assert, MPIR_Win * win);
128 typedef int (*MPIDI_NM_mpi_win_wait_t) (MPIR_Win * win);
129 typedef int (*MPIDI_NM_mpi_win_test_t) (MPIR_Win * win, int *flag);
130 typedef int (*MPIDI_NM_mpi_win_lock_t) (int lock_type, int rank, int assert, MPIR_Win * win,
131                                         MPIDI_av_entry_t * addr);
132 typedef int (*MPIDI_NM_mpi_win_unlock_t) (int rank, MPIR_Win * win, MPIDI_av_entry_t * addr);
133 typedef int (*MPIDI_NM_mpi_win_get_info_t) (MPIR_Win * win, MPIR_Info ** info_p_p);
134 typedef int (*MPIDI_NM_mpi_get_t) (void *origin_addr, int origin_count,
135                                    MPI_Datatype origin_datatype, int target_rank,
136                                    MPI_Aint target_disp, int target_count,
137                                    MPI_Datatype target_datatype, MPIR_Win * win,
138                                    MPIDI_av_entry_t * addr, MPIDI_winattr_t winattr);
139 typedef int (*MPIDI_NM_mpi_win_free_t) (MPIR_Win ** win_ptr);
140 typedef int (*MPIDI_NM_mpi_win_fence_t) (int assert, MPIR_Win * win);
141 typedef int (*MPIDI_NM_mpi_win_create_t) (void *base, MPI_Aint length, int disp_unit,
142                                           MPIR_Info * info, MPIR_Comm * comm_ptr,
143                                           MPIR_Win ** win_ptr);
144 typedef int (*MPIDI_NM_mpi_accumulate_t) (const void *origin_addr, int origin_count,
145                                           MPI_Datatype origin_datatype, int target_rank,
146                                           MPI_Aint target_disp, int target_count,
147                                           MPI_Datatype target_datatype, MPI_Op op, MPIR_Win * win,
148                                           MPIDI_av_entry_t * addr, MPIDI_winattr_t winattr);
149 typedef int (*MPIDI_NM_mpi_win_attach_t) (MPIR_Win * win, void *base, MPI_Aint size);
150 typedef int (*MPIDI_NM_mpi_win_allocate_shared_t) (MPI_Aint size, int disp_unit,
151                                                    MPIR_Info * info_ptr, MPIR_Comm * comm_ptr,
152                                                    void **base_ptr, MPIR_Win ** win_ptr);
153 typedef int (*MPIDI_NM_mpi_rput_t) (const void *origin_addr, int origin_count,
154                                     MPI_Datatype origin_datatype, int target_rank,
155                                     MPI_Aint target_disp, int target_count,
156                                     MPI_Datatype target_datatype, MPIR_Win * win,
157                                     MPIDI_av_entry_t * addr, MPIDI_winattr_t winattr,
158                                     MPIR_Request ** request);
159 typedef int (*MPIDI_NM_mpi_win_flush_local_t) (int rank, MPIR_Win * win, MPIDI_av_entry_t * addr);
160 typedef int (*MPIDI_NM_mpi_win_detach_t) (MPIR_Win * win, const void *base);
161 typedef int (*MPIDI_NM_mpi_compare_and_swap_t) (const void *origin_addr, const void *compare_addr,
162                                                 void *result_addr, MPI_Datatype datatype,
163                                                 int target_rank, MPI_Aint target_disp,
164                                                 MPIR_Win * win, MPIDI_av_entry_t * addr,
165                                                 MPIDI_winattr_t winattr);
166 typedef int (*MPIDI_NM_mpi_raccumulate_t) (const void *origin_addr, int origin_count,
167                                            MPI_Datatype origin_datatype, int target_rank,
168                                            MPI_Aint target_disp, int target_count,
169                                            MPI_Datatype target_datatype, MPI_Op op, MPIR_Win * win,
170                                            MPIDI_av_entry_t * addr, MPIDI_winattr_t winattr,
171                                            MPIR_Request ** request);
172 typedef int (*MPIDI_NM_mpi_rget_accumulate_t) (const void *origin_addr, int origin_count,
173                                                MPI_Datatype origin_datatype, void *result_addr,
174                                                int result_count, MPI_Datatype result_datatype,
175                                                int target_rank, MPI_Aint target_disp,
176                                                int target_count, MPI_Datatype target_datatype,
177                                                MPI_Op op, MPIR_Win * win, MPIDI_av_entry_t * addr,
178                                                MPIDI_winattr_t winattr, MPIR_Request ** request);
179 typedef int (*MPIDI_NM_mpi_fetch_and_op_t) (const void *origin_addr, void *result_addr,
180                                             MPI_Datatype datatype, int target_rank,
181                                             MPI_Aint target_disp, MPI_Op op, MPIR_Win * win,
182                                             MPIDI_av_entry_t * addr, MPIDI_winattr_t winattr);
183 typedef int (*MPIDI_NM_mpi_win_allocate_t) (MPI_Aint size, int disp_unit, MPIR_Info * info,
184                                             MPIR_Comm * comm, void *baseptr, MPIR_Win ** win);
185 typedef int (*MPIDI_NM_mpi_win_flush_t) (int rank, MPIR_Win * win, MPIDI_av_entry_t * addr);
186 typedef int (*MPIDI_NM_mpi_win_flush_local_all_t) (MPIR_Win * win);
187 typedef int (*MPIDI_NM_mpi_win_unlock_all_t) (MPIR_Win * win);
188 typedef int (*MPIDI_NM_mpi_win_create_dynamic_t) (MPIR_Info * info, MPIR_Comm * comm,
189                                                   MPIR_Win ** win);
190 typedef int (*MPIDI_NM_mpi_rget_t) (void *origin_addr, int origin_count,
191                                     MPI_Datatype origin_datatype, int target_rank,
192                                     MPI_Aint target_disp, int target_count,
193                                     MPI_Datatype target_datatype, MPIR_Win * win,
194                                     MPIDI_av_entry_t * addr, MPIDI_winattr_t winattr,
195                                     MPIR_Request ** request);
196 typedef int (*MPIDI_NM_mpi_win_sync_t) (MPIR_Win * win);
197 typedef int (*MPIDI_NM_mpi_win_flush_all_t) (MPIR_Win * win);
198 typedef int (*MPIDI_NM_mpi_get_accumulate_t) (const void *origin_addr, int origin_count,
199                                               MPI_Datatype origin_datatype, void *result_addr,
200                                               int result_count, MPI_Datatype result_datatype,
201                                               int target_rank, MPI_Aint target_disp,
202                                               int target_count, MPI_Datatype target_datatype,
203                                               MPI_Op op, MPIR_Win * win, MPIDI_av_entry_t * addr,
204                                               MPIDI_winattr_t winattr);
205 typedef int (*MPIDI_NM_mpi_win_lock_all_t) (int assert, MPIR_Win * win);
206 typedef int (*MPIDI_NM_rank_is_local_t) (int target, MPIR_Comm * comm);
207 typedef int (*MPIDI_NM_av_is_local_t) (MPIDI_av_entry_t * av);
208 typedef int (*MPIDI_NM_mpi_barrier_t) (MPIR_Comm * comm, MPIR_Errflag_t * errflag);
209 typedef int (*MPIDI_NM_mpi_bcast_t) (void *buffer, int count, MPI_Datatype datatype, int root,
210                                      MPIR_Comm * comm, MPIR_Errflag_t * errflag);
211 typedef int (*MPIDI_NM_mpi_allreduce_t) (const void *sendbuf, void *recvbuf, int count,
212                                          MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
213                                          MPIR_Errflag_t * errflag);
214 typedef int (*MPIDI_NM_mpi_allgather_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
215                                          void *recvbuf, int recvcount, MPI_Datatype recvtype,
216                                          MPIR_Comm * comm, MPIR_Errflag_t * errflag);
217 typedef int (*MPIDI_NM_mpi_allgatherv_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
218                                           void *recvbuf, const int *recvcounts, const int *displs,
219                                           MPI_Datatype recvtype, MPIR_Comm * comm,
220                                           MPIR_Errflag_t * errflag);
221 typedef int (*MPIDI_NM_mpi_scatter_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
222                                        void *recvbuf, int recvcount, MPI_Datatype recvtype,
223                                        int root, MPIR_Comm * comm, MPIR_Errflag_t * errflag);
224 typedef int (*MPIDI_NM_mpi_scatterv_t) (const void *sendbuf, const int *sendcounts,
225                                         const int *displs, MPI_Datatype sendtype, void *recvbuf,
226                                         int recvcount, MPI_Datatype recvtype, int root,
227                                         MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag);
228 typedef int (*MPIDI_NM_mpi_gather_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
229                                       void *recvbuf, int recvcount, MPI_Datatype recvtype, int root,
230                                       MPIR_Comm * comm, MPIR_Errflag_t * errflag);
231 typedef int (*MPIDI_NM_mpi_gatherv_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
232                                        void *recvbuf, const int *recvcounts, const int *displs,
233                                        MPI_Datatype recvtype, int root, MPIR_Comm * comm,
234                                        MPIR_Errflag_t * errflag);
235 typedef int (*MPIDI_NM_mpi_alltoall_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
236                                         void *recvbuf, int recvcount, MPI_Datatype recvtype,
237                                         MPIR_Comm * comm, MPIR_Errflag_t * errflag);
238 typedef int (*MPIDI_NM_mpi_alltoallv_t) (const void *sendbuf, const int *sendcounts,
239                                          const int *sdispls, MPI_Datatype sendtype, void *recvbuf,
240                                          const int *recvcounts, const int *rdispls,
241                                          MPI_Datatype recvtype, MPIR_Comm * comm,
242                                          MPIR_Errflag_t * errflag);
243 typedef int (*MPIDI_NM_mpi_alltoallw_t) (const void *sendbuf, const int *sendcounts,
244                                          const int *sdispls, const MPI_Datatype sendtypes[],
245                                          void *recvbuf, const int *recvcounts, const int *rdispls,
246                                          const MPI_Datatype recvtypes[], MPIR_Comm * comm,
247                                          MPIR_Errflag_t * errflag);
248 typedef int (*MPIDI_NM_mpi_reduce_t) (const void *sendbuf, void *recvbuf, int count,
249                                       MPI_Datatype datatype, MPI_Op op, int root,
250                                       MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag);
251 typedef int (*MPIDI_NM_mpi_reduce_scatter_t) (const void *sendbuf, void *recvbuf,
252                                               const int *recvcounts, MPI_Datatype datatype,
253                                               MPI_Op op, MPIR_Comm * comm_ptr,
254                                               MPIR_Errflag_t * errflag);
255 typedef int (*MPIDI_NM_mpi_reduce_scatter_block_t) (const void *sendbuf, void *recvbuf,
256                                                     int recvcount, MPI_Datatype datatype, MPI_Op op,
257                                                     MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag);
258 typedef int (*MPIDI_NM_mpi_scan_t) (const void *sendbuf, void *recvbuf, int count,
259                                     MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
260                                     MPIR_Errflag_t * errflag);
261 typedef int (*MPIDI_NM_mpi_exscan_t) (const void *sendbuf, void *recvbuf, int count,
262                                       MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
263                                       MPIR_Errflag_t * errflag);
264 typedef int (*MPIDI_NM_mpi_neighbor_allgather_t) (const void *sendbuf, int sendcount,
265                                                   MPI_Datatype sendtype, void *recvbuf,
266                                                   int recvcount, MPI_Datatype recvtype,
267                                                   MPIR_Comm * comm);
268 typedef int (*MPIDI_NM_mpi_neighbor_allgatherv_t) (const void *sendbuf, int sendcount,
269                                                    MPI_Datatype sendtype, void *recvbuf,
270                                                    const int *recvcounts, const int *displs,
271                                                    MPI_Datatype recvtype, MPIR_Comm * comm);
272 typedef int (*MPIDI_NM_mpi_neighbor_alltoallv_t) (const void *sendbuf, const int *sendcounts,
273                                                   const int *sdispls, MPI_Datatype sendtype,
274                                                   void *recvbuf, const int *recvcounts,
275                                                   const int *rdispls, MPI_Datatype recvtype,
276                                                   MPIR_Comm * comm);
277 typedef int (*MPIDI_NM_mpi_neighbor_alltoallw_t) (const void *sendbuf, const int *sendcounts,
278                                                   const MPI_Aint * sdispls,
279                                                   const MPI_Datatype * sendtypes, void *recvbuf,
280                                                   const int *recvcounts, const MPI_Aint * rdispls,
281                                                   const MPI_Datatype * recvtypes, MPIR_Comm * comm);
282 typedef int (*MPIDI_NM_mpi_neighbor_alltoall_t) (const void *sendbuf, int sendcount,
283                                                  MPI_Datatype sendtype, void *recvbuf,
284                                                  int recvcount, MPI_Datatype recvtype,
285                                                  MPIR_Comm * comm);
286 typedef int (*MPIDI_NM_mpi_ineighbor_allgather_t) (const void *sendbuf, int sendcount,
287                                                    MPI_Datatype sendtype, void *recvbuf,
288                                                    int recvcount, MPI_Datatype recvtype,
289                                                    MPIR_Comm * comm, MPIR_Request ** req);
290 typedef int (*MPIDI_NM_mpi_ineighbor_allgatherv_t) (const void *sendbuf, int sendcount,
291                                                     MPI_Datatype sendtype, void *recvbuf,
292                                                     const int *recvcounts, const int *displs,
293                                                     MPI_Datatype recvtype, MPIR_Comm * comm,
294                                                     MPIR_Request ** req);
295 typedef int (*MPIDI_NM_mpi_ineighbor_alltoall_t) (const void *sendbuf, int sendcount,
296                                                   MPI_Datatype sendtype, void *recvbuf,
297                                                   int recvcount, MPI_Datatype recvtype,
298                                                   MPIR_Comm * comm, MPIR_Request ** req);
299 typedef int (*MPIDI_NM_mpi_ineighbor_alltoallv_t) (const void *sendbuf, const int *sendcounts,
300                                                    const int *sdispls, MPI_Datatype sendtype,
301                                                    void *recvbuf, const int *recvcounts,
302                                                    const int *rdispls, MPI_Datatype recvtype,
303                                                    MPIR_Comm * comm, MPIR_Request ** req);
304 typedef int (*MPIDI_NM_mpi_ineighbor_alltoallw_t) (const void *sendbuf, const int *sendcounts,
305                                                    const MPI_Aint * sdispls,
306                                                    const MPI_Datatype * sendtypes, void *recvbuf,
307                                                    const int *recvcounts, const MPI_Aint * rdispls,
308                                                    const MPI_Datatype * recvtypes, MPIR_Comm * comm,
309                                                    MPIR_Request ** req);
310 typedef int (*MPIDI_NM_mpi_ibarrier_t) (MPIR_Comm * comm, MPIR_Request ** req);
311 typedef int (*MPIDI_NM_mpi_ibcast_t) (void *buffer, int count, MPI_Datatype datatype, int root,
312                                       MPIR_Comm * comm, MPIR_Request ** req);
313 typedef int (*MPIDI_NM_mpi_iallgather_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
314                                           void *recvbuf, int recvcount, MPI_Datatype recvtype,
315                                           MPIR_Comm * comm, MPIR_Request ** req);
316 typedef int (*MPIDI_NM_mpi_iallgatherv_t) (const void *sendbuf, int sendcount,
317                                            MPI_Datatype sendtype, void *recvbuf,
318                                            const int *recvcounts, const int *displs,
319                                            MPI_Datatype recvtype, MPIR_Comm * comm,
320                                            MPIR_Request ** req);
321 typedef int (*MPIDI_NM_mpi_iallreduce_t) (const void *sendbuf, void *recvbuf, int count,
322                                           MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
323                                           MPIR_Request ** req);
324 typedef int (*MPIDI_NM_mpi_ialltoall_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
325                                          void *recvbuf, int recvcount, MPI_Datatype recvtype,
326                                          MPIR_Comm * comm, MPIR_Request ** req);
327 typedef int (*MPIDI_NM_mpi_ialltoallv_t) (const void *sendbuf, const int *sendcounts,
328                                           const int *sdispls, MPI_Datatype sendtype, void *recvbuf,
329                                           const int *recvcounts, const int *rdispls,
330                                           MPI_Datatype recvtype, MPIR_Comm * comm,
331                                           MPIR_Request ** req);
332 typedef int (*MPIDI_NM_mpi_ialltoallw_t) (const void *sendbuf, const int *sendcounts,
333                                           const int *sdispls, const MPI_Datatype sendtypes[],
334                                           void *recvbuf, const int *recvcounts, const int *rdispls,
335                                           const MPI_Datatype recvtypes[], MPIR_Comm * comm,
336                                           MPIR_Request ** req);
337 typedef int (*MPIDI_NM_mpi_iexscan_t) (const void *sendbuf, void *recvbuf, int count,
338                                        MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
339                                        MPIR_Request ** req);
340 typedef int (*MPIDI_NM_mpi_igather_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
341                                        void *recvbuf, int recvcount, MPI_Datatype recvtype,
342                                        int root, MPIR_Comm * comm, MPIR_Request ** req);
343 typedef int (*MPIDI_NM_mpi_igatherv_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
344                                         void *recvbuf, const int *recvcounts, const int *displs,
345                                         MPI_Datatype recvtype, int root, MPIR_Comm * comm,
346                                         MPIR_Request ** req);
347 typedef int (*MPIDI_NM_mpi_ireduce_scatter_block_t) (const void *sendbuf, void *recvbuf,
348                                                      int recvcount, MPI_Datatype datatype,
349                                                      MPI_Op op, MPIR_Comm * comm,
350                                                      MPIR_Request ** req);
351 typedef int (*MPIDI_NM_mpi_ireduce_scatter_t) (const void *sendbuf, void *recvbuf,
352                                                const int *recvcounts, MPI_Datatype datatype,
353                                                MPI_Op op, MPIR_Comm * comm, MPIR_Request ** req);
354 typedef int (*MPIDI_NM_mpi_ireduce_t) (const void *sendbuf, void *recvbuf, int count,
355                                        MPI_Datatype datatype, MPI_Op op, int root,
356                                        MPIR_Comm * comm_ptr, MPIR_Request ** req);
357 typedef int (*MPIDI_NM_mpi_iscan_t) (const void *sendbuf, void *recvbuf, int count,
358                                      MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
359                                      MPIR_Request ** req);
360 typedef int (*MPIDI_NM_mpi_iscatter_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
361                                         void *recvbuf, int recvcount, MPI_Datatype recvtype,
362                                         int root, MPIR_Comm * comm, MPIR_Request ** req);
363 typedef int (*MPIDI_NM_mpi_iscatterv_t) (const void *sendbuf, const int *sendcounts,
364                                          const int *displs, MPI_Datatype sendtype, void *recvbuf,
365                                          int recvcount, MPI_Datatype recvtype, int root,
366                                          MPIR_Comm * comm_ptr, MPIR_Request ** req);
367 typedef int (*MPIDI_NM_mpi_type_commit_hook_t) (MPIR_Datatype * datatype_p);
368 typedef int (*MPIDI_NM_mpi_type_free_hook_t) (MPIR_Datatype * datatype_p);
369 typedef int (*MPIDI_NM_mpi_op_commit_hook_t) (MPIR_Op * op_p);
370 typedef int (*MPIDI_NM_mpi_op_free_hook_t) (MPIR_Op * op_p);
371 
372 typedef struct MPIDI_NM_funcs {
373     MPIDI_NM_mpi_init_t mpi_init;
374     MPIDI_NM_mpi_finalize_t mpi_finalize;
375     MPIDI_NM_post_init_t post_init;
376     MPIDI_NM_get_vci_attr_t get_vci_attr;
377     MPIDI_NM_progress_t progress;
378     MPIDI_NM_mpi_comm_connect_t mpi_comm_connect;
379     MPIDI_NM_mpi_comm_disconnect_t mpi_comm_disconnect;
380     MPIDI_NM_mpi_open_port_t mpi_open_port;
381     MPIDI_NM_mpi_close_port_t mpi_close_port;
382     MPIDI_NM_mpi_comm_accept_t mpi_comm_accept;
383     /* Routines that handle addressing */
384     MPIDI_NM_comm_get_lpid_t comm_get_lpid;
385     MPIDI_NM_get_local_upids_t get_local_upids;
386     MPIDI_NM_upids_to_lupids_t upids_to_lupids;
387     MPIDI_NM_create_intercomm_from_lpids_t create_intercomm_from_lpids;
388     MPIDI_NM_mpi_comm_commit_pre_hook_t mpi_comm_commit_pre_hook;
389     MPIDI_NM_mpi_comm_commit_post_hook_t mpi_comm_commit_post_hook;
390     MPIDI_NM_mpi_comm_free_hook_t mpi_comm_free_hook;
391     /* Window initialization/cleanup routines */
392     MPIDI_NM_mpi_win_create_hook_t mpi_win_create_hook;
393     MPIDI_NM_mpi_win_allocate_hook_t mpi_win_allocate_hook;
394     MPIDI_NM_mpi_win_allocate_shared_hook_t mpi_win_allocate_shared_hook;
395     MPIDI_NM_mpi_win_create_dynamic_hook_t mpi_win_create_dynamic_hook;
396     MPIDI_NM_mpi_win_attach_hook_t mpi_win_attach_hook;
397     MPIDI_NM_mpi_win_detach_hook_t mpi_win_detach_hook;
398     MPIDI_NM_mpi_win_free_hook_t mpi_win_free_hook;
399     /* RMA synchronization routines */
400     MPIDI_NM_rma_win_cmpl_hook_t rma_win_cmpl_hook;
401     MPIDI_NM_rma_win_local_cmpl_hook_t rma_win_local_cmpl_hook;
402     MPIDI_NM_rma_target_cmpl_hook_t rma_target_cmpl_hook;
403     MPIDI_NM_rma_target_local_cmpl_hook_t rma_target_local_cmpl_hook;
404     /* Request allocation routines */
405     MPIDI_NM_am_request_init_t am_request_init;
406     MPIDI_NM_am_request_finalize_t am_request_finalize;
407     /* Active Message Routines */
408     MPIDI_NM_am_send_hdr_t am_send_hdr;
409     MPIDI_NM_am_isend_t am_isend;
410     MPIDI_NM_am_isendv_t am_isendv;
411     MPIDI_NM_am_send_hdr_reply_t am_send_hdr_reply;
412     MPIDI_NM_am_isend_reply_t am_isend_reply;
413     MPIDI_NM_am_hdr_max_sz_t am_hdr_max_sz;
414     MPIDI_NM_am_eager_limit_t am_eager_limit;
415     MPIDI_NM_am_eager_buf_limit_t am_eager_buf_limit;
416 } MPIDI_NM_funcs_t;
417 
418 typedef struct MPIDI_NM_native_funcs {
419     MPIDI_NM_mpi_send_t mpi_send;
420     MPIDI_NM_send_coll_t send_coll;
421     MPIDI_NM_mpi_ssend_t mpi_ssend;
422     MPIDI_NM_mpi_isend_t mpi_isend;
423     MPIDI_NM_isend_coll_t isend_coll;
424     MPIDI_NM_mpi_issend_t mpi_issend;
425     MPIDI_NM_mpi_cancel_send_t mpi_cancel_send;
426     MPIDI_NM_mpi_recv_t mpi_recv;
427     MPIDI_NM_mpi_irecv_t mpi_irecv;
428     MPIDI_NM_mpi_imrecv_t mpi_imrecv;
429     MPIDI_NM_mpi_cancel_recv_t mpi_cancel_recv;
430     MPIDI_NM_mpi_alloc_mem_t mpi_alloc_mem;
431     MPIDI_NM_mpi_free_mem_t mpi_free_mem;
432     MPIDI_NM_mpi_improbe_t mpi_improbe;
433     MPIDI_NM_mpi_iprobe_t mpi_iprobe;
434     MPIDI_NM_mpi_win_set_info_t mpi_win_set_info;
435     MPIDI_NM_mpi_win_shared_query_t mpi_win_shared_query;
436     MPIDI_NM_mpi_put_t mpi_put;
437     MPIDI_NM_mpi_win_start_t mpi_win_start;
438     MPIDI_NM_mpi_win_complete_t mpi_win_complete;
439     MPIDI_NM_mpi_win_post_t mpi_win_post;
440     MPIDI_NM_mpi_win_wait_t mpi_win_wait;
441     MPIDI_NM_mpi_win_test_t mpi_win_test;
442     MPIDI_NM_mpi_win_lock_t mpi_win_lock;
443     MPIDI_NM_mpi_win_unlock_t mpi_win_unlock;
444     MPIDI_NM_mpi_win_get_info_t mpi_win_get_info;
445     MPIDI_NM_mpi_get_t mpi_get;
446     MPIDI_NM_mpi_win_free_t mpi_win_free;
447     MPIDI_NM_mpi_win_fence_t mpi_win_fence;
448     MPIDI_NM_mpi_win_create_t mpi_win_create;
449     MPIDI_NM_mpi_accumulate_t mpi_accumulate;
450     MPIDI_NM_mpi_win_attach_t mpi_win_attach;
451     MPIDI_NM_mpi_win_allocate_shared_t mpi_win_allocate_shared;
452     MPIDI_NM_mpi_rput_t mpi_rput;
453     MPIDI_NM_mpi_win_flush_local_t mpi_win_flush_local;
454     MPIDI_NM_mpi_win_detach_t mpi_win_detach;
455     MPIDI_NM_mpi_compare_and_swap_t mpi_compare_and_swap;
456     MPIDI_NM_mpi_raccumulate_t mpi_raccumulate;
457     MPIDI_NM_mpi_rget_accumulate_t mpi_rget_accumulate;
458     MPIDI_NM_mpi_fetch_and_op_t mpi_fetch_and_op;
459     MPIDI_NM_mpi_win_allocate_t mpi_win_allocate;
460     MPIDI_NM_mpi_win_flush_t mpi_win_flush;
461     MPIDI_NM_mpi_win_flush_local_all_t mpi_win_flush_local_all;
462     MPIDI_NM_mpi_win_unlock_all_t mpi_win_unlock_all;
463     MPIDI_NM_mpi_win_create_dynamic_t mpi_win_create_dynamic;
464     MPIDI_NM_mpi_rget_t mpi_rget;
465     MPIDI_NM_mpi_win_sync_t mpi_win_sync;
466     MPIDI_NM_mpi_win_flush_all_t mpi_win_flush_all;
467     MPIDI_NM_mpi_get_accumulate_t mpi_get_accumulate;
468     MPIDI_NM_mpi_win_lock_all_t mpi_win_lock_all;
469     MPIDI_NM_rank_is_local_t rank_is_local;
470     MPIDI_NM_av_is_local_t av_is_local;
471     /* Collectives */
472     MPIDI_NM_mpi_barrier_t mpi_barrier;
473     MPIDI_NM_mpi_bcast_t mpi_bcast;
474     MPIDI_NM_mpi_allreduce_t mpi_allreduce;
475     MPIDI_NM_mpi_allgather_t mpi_allgather;
476     MPIDI_NM_mpi_allgatherv_t mpi_allgatherv;
477     MPIDI_NM_mpi_scatter_t mpi_scatter;
478     MPIDI_NM_mpi_scatterv_t mpi_scatterv;
479     MPIDI_NM_mpi_gather_t mpi_gather;
480     MPIDI_NM_mpi_gatherv_t mpi_gatherv;
481     MPIDI_NM_mpi_alltoall_t mpi_alltoall;
482     MPIDI_NM_mpi_alltoallv_t mpi_alltoallv;
483     MPIDI_NM_mpi_alltoallw_t mpi_alltoallw;
484     MPIDI_NM_mpi_reduce_t mpi_reduce;
485     MPIDI_NM_mpi_reduce_scatter_t mpi_reduce_scatter;
486     MPIDI_NM_mpi_reduce_scatter_block_t mpi_reduce_scatter_block;
487     MPIDI_NM_mpi_scan_t mpi_scan;
488     MPIDI_NM_mpi_exscan_t mpi_exscan;
489     MPIDI_NM_mpi_neighbor_allgather_t mpi_neighbor_allgather;
490     MPIDI_NM_mpi_neighbor_allgatherv_t mpi_neighbor_allgatherv;
491     MPIDI_NM_mpi_neighbor_alltoall_t mpi_neighbor_alltoall;
492     MPIDI_NM_mpi_neighbor_alltoallv_t mpi_neighbor_alltoallv;
493     MPIDI_NM_mpi_neighbor_alltoallw_t mpi_neighbor_alltoallw;
494     MPIDI_NM_mpi_ineighbor_allgather_t mpi_ineighbor_allgather;
495     MPIDI_NM_mpi_ineighbor_allgatherv_t mpi_ineighbor_allgatherv;
496     MPIDI_NM_mpi_ineighbor_alltoall_t mpi_ineighbor_alltoall;
497     MPIDI_NM_mpi_ineighbor_alltoallv_t mpi_ineighbor_alltoallv;
498     MPIDI_NM_mpi_ineighbor_alltoallw_t mpi_ineighbor_alltoallw;
499     MPIDI_NM_mpi_ibarrier_t mpi_ibarrier;
500     MPIDI_NM_mpi_ibcast_t mpi_ibcast;
501     MPIDI_NM_mpi_iallgather_t mpi_iallgather;
502     MPIDI_NM_mpi_iallgatherv_t mpi_iallgatherv;
503     MPIDI_NM_mpi_iallreduce_t mpi_iallreduce;
504     MPIDI_NM_mpi_ialltoall_t mpi_ialltoall;
505     MPIDI_NM_mpi_ialltoallv_t mpi_ialltoallv;
506     MPIDI_NM_mpi_ialltoallw_t mpi_ialltoallw;
507     MPIDI_NM_mpi_iexscan_t mpi_iexscan;
508     MPIDI_NM_mpi_igather_t mpi_igather;
509     MPIDI_NM_mpi_igatherv_t mpi_igatherv;
510     MPIDI_NM_mpi_ireduce_scatter_block_t mpi_ireduce_scatter_block;
511     MPIDI_NM_mpi_ireduce_scatter_t mpi_ireduce_scatter;
512     MPIDI_NM_mpi_ireduce_t mpi_ireduce;
513     MPIDI_NM_mpi_iscan_t mpi_iscan;
514     MPIDI_NM_mpi_iscatter_t mpi_iscatter;
515     MPIDI_NM_mpi_iscatterv_t mpi_iscatterv;
516     /* Datatype hooks */
517     MPIDI_NM_mpi_type_commit_hook_t mpi_type_commit_hook;
518     MPIDI_NM_mpi_type_free_hook_t mpi_type_free_hook;
519     /* Op hooks */
520     MPIDI_NM_mpi_op_commit_hook_t mpi_op_commit_hook;
521     MPIDI_NM_mpi_op_free_hook_t mpi_op_free_hook;
522 } MPIDI_NM_native_funcs_t;
523 
524 extern MPIDI_NM_funcs_t *MPIDI_NM_funcs[];
525 extern MPIDI_NM_funcs_t *MPIDI_NM_func;
526 extern MPIDI_NM_native_funcs_t *MPIDI_NM_native_funcs[];
527 extern MPIDI_NM_native_funcs_t *MPIDI_NM_native_func;
528 extern int MPIDI_num_netmods;
529 extern char MPIDI_NM_strings[][MPIDI_MAX_NETMOD_STRING_LEN];
530 
531 int MPIDI_NM_mpi_init_hook(int rank, int size, int appnum, int *tag_bits, MPIR_Comm * init_comm);
532 int MPIDI_NM_mpi_finalize_hook(void);
533 int MPIDI_NM_post_init(void);
534 int MPIDI_NM_get_vci_attr(int vci);
535 int MPIDI_NM_progress(int vci, int blocking);
536 int MPIDI_NM_mpi_comm_connect(const char *port_name, MPIR_Info * info, int root, int timeout,
537                               MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr);
538 int MPIDI_NM_mpi_comm_disconnect(MPIR_Comm * comm_ptr);
539 int MPIDI_NM_mpi_open_port(MPIR_Info * info_ptr, char *port_name);
540 int MPIDI_NM_mpi_close_port(const char *port_name);
541 int MPIDI_NM_mpi_comm_accept(const char *port_name, MPIR_Info * info, int root, MPIR_Comm * comm,
542                              MPIR_Comm ** newcomm_ptr);
543 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_am_send_hdr(int rank, MPIR_Comm * comm, int handler_id,
544                                                   const void *am_hdr,
545                                                   size_t am_hdr_sz) MPL_STATIC_INLINE_SUFFIX;
546 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_am_isend(int rank, MPIR_Comm * comm, int handler_id,
547                                                const void *am_hdr, size_t am_hdr_sz,
548                                                const void *data, MPI_Count count,
549                                                MPI_Datatype datatype,
550                                                MPIR_Request * sreq) MPL_STATIC_INLINE_SUFFIX;
551 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_am_isendv(int rank, MPIR_Comm * comm, int handler_id,
552                                                 struct iovec *am_hdrs, size_t iov_len,
553                                                 const void *data, MPI_Count count,
554                                                 MPI_Datatype datatype,
555                                                 MPIR_Request * sreq) MPL_STATIC_INLINE_SUFFIX;
556 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_am_send_hdr_reply(MPIR_Context_id_t context_id, int src_rank,
557                                                         int handler_id, const void *am_hdr,
558                                                         size_t am_hdr_sz) MPL_STATIC_INLINE_SUFFIX;
559 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_am_isend_reply(MPIR_Context_id_t context_id, int src_rank,
560                                                      int handler_id, const void *am_hdr,
561                                                      size_t am_hdr_sz, const void *data,
562                                                      MPI_Count count, MPI_Datatype datatype,
563                                                      MPIR_Request * sreq) MPL_STATIC_INLINE_SUFFIX;
564 MPL_STATIC_INLINE_PREFIX size_t MPIDI_NM_am_hdr_max_sz(void) MPL_STATIC_INLINE_SUFFIX;
565 MPL_STATIC_INLINE_PREFIX size_t MPIDI_NM_am_eager_limit(void) MPL_STATIC_INLINE_SUFFIX;
566 MPL_STATIC_INLINE_PREFIX size_t MPIDI_NM_am_eager_buf_limit(void) MPL_STATIC_INLINE_SUFFIX;
567 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_comm_get_lpid(MPIR_Comm * comm_ptr, int idx,
568                                                     int *lpid_ptr,
569                                                     bool is_remote) MPL_STATIC_INLINE_SUFFIX;
570 int MPIDI_NM_get_local_upids(MPIR_Comm * comm, size_t ** local_upid_size, char **local_upids);
571 int MPIDI_NM_upids_to_lupids(int size, size_t * remote_upid_size, char *remote_upids,
572                              int **remote_lupids);
573 int MPIDI_NM_create_intercomm_from_lpids(MPIR_Comm * newcomm_ptr, int size, const int lpids[]);
574 int MPIDI_NM_mpi_comm_commit_pre_hook(MPIR_Comm * comm);
575 int MPIDI_NM_mpi_comm_commit_post_hook(MPIR_Comm * comm);
576 int MPIDI_NM_mpi_comm_free_hook(MPIR_Comm * comm);
577 int MPIDI_NM_mpi_win_create_hook(MPIR_Win * win);
578 int MPIDI_NM_mpi_win_allocate_hook(MPIR_Win * win);
579 int MPIDI_NM_mpi_win_allocate_shared_hook(MPIR_Win * win);
580 int MPIDI_NM_mpi_win_create_dynamic_hook(MPIR_Win * win);
581 int MPIDI_NM_mpi_win_attach_hook(MPIR_Win * win, void *base, MPI_Aint size);
582 int MPIDI_NM_mpi_win_detach_hook(MPIR_Win * win, const void *base);
583 int MPIDI_NM_mpi_win_free_hook(MPIR_Win * win);
584 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_rma_win_cmpl_hook(MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
585 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_rma_win_local_cmpl_hook(MPIR_Win *
586                                                               win) MPL_STATIC_INLINE_SUFFIX;
587 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_rma_target_cmpl_hook(int rank,
588                                                            MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
589 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_rma_target_local_cmpl_hook(int rank,
590                                                                  MPIR_Win *
591                                                                  win) MPL_STATIC_INLINE_SUFFIX;
592 MPL_STATIC_INLINE_PREFIX void MPIDI_NM_am_request_init(MPIR_Request * req) MPL_STATIC_INLINE_SUFFIX;
593 MPL_STATIC_INLINE_PREFIX void MPIDI_NM_am_request_finalize(MPIR_Request *
594                                                            req) MPL_STATIC_INLINE_SUFFIX;
595 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_send(const void *buf, MPI_Aint count,
596                                                MPI_Datatype datatype, int rank, int tag,
597                                                MPIR_Comm * comm, int context_offset,
598                                                MPIDI_av_entry_t * addr,
599                                                MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
600 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_send_coll(const void *buf, MPI_Aint count,
601                                                 MPI_Datatype datatype, int rank, int tag,
602                                                 MPIR_Comm * comm, int context_offset,
603                                                 MPIDI_av_entry_t * addr, MPIR_Request ** request,
604                                                 MPIR_Errflag_t * errflag) MPL_STATIC_INLINE_SUFFIX;
605 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ssend(const void *buf, MPI_Aint count,
606                                                 MPI_Datatype datatype, int rank, int tag,
607                                                 MPIR_Comm * comm, int context_offset,
608                                                 MPIDI_av_entry_t * addr,
609                                                 MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
610 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_isend(const void *buf, MPI_Aint count,
611                                                 MPI_Datatype datatype, int rank, int tag,
612                                                 MPIR_Comm * comm, int context_offset,
613                                                 MPIDI_av_entry_t * addr,
614                                                 MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
615 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_isend_coll(const void *buf, MPI_Aint count,
616                                                  MPI_Datatype datatype, int rank, int tag,
617                                                  MPIR_Comm * comm, int context_offset,
618                                                  MPIDI_av_entry_t * addr, MPIR_Request ** request,
619                                                  MPIR_Errflag_t * errflag) MPL_STATIC_INLINE_SUFFIX;
620 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_issend(const void *buf, MPI_Aint count,
621                                                  MPI_Datatype datatype, int rank, int tag,
622                                                  MPIR_Comm * comm, int context_offset,
623                                                  MPIDI_av_entry_t * addr,
624                                                  MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
625 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_cancel_send(MPIR_Request * sreq) MPL_STATIC_INLINE_SUFFIX;
626 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_recv(void *buf, MPI_Aint count, MPI_Datatype datatype,
627                                                int rank, int tag, MPIR_Comm * comm,
628                                                int context_offset, MPIDI_av_entry_t * addr,
629                                                MPI_Status * status,
630                                                MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
631 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_irecv(void *buf, MPI_Aint count, MPI_Datatype datatype,
632                                                 int rank, int tag, MPIR_Comm * comm,
633                                                 int context_offset, MPIDI_av_entry_t * addr,
634                                                 MPIR_Request ** request,
635                                                 MPIR_Request * partner) MPL_STATIC_INLINE_SUFFIX;
636 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_imrecv(void *buf, MPI_Aint count, MPI_Datatype datatype,
637                                                  MPIR_Request * message) MPL_STATIC_INLINE_SUFFIX;
638 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_cancel_recv(MPIR_Request * rreq) MPL_STATIC_INLINE_SUFFIX;
639 void *MPIDI_NM_mpi_alloc_mem(size_t size, MPIR_Info * info_ptr);
640 int MPIDI_NM_mpi_free_mem(void *ptr);
641 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_improbe(int source, int tag, MPIR_Comm * comm,
642                                                   int context_offset, MPIDI_av_entry_t * addr,
643                                                   int *flag, MPIR_Request ** message,
644                                                   MPI_Status * status) MPL_STATIC_INLINE_SUFFIX;
645 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iprobe(int source, int tag, MPIR_Comm * comm,
646                                                  int context_offset, MPIDI_av_entry_t * addr,
647                                                  int *flag,
648                                                  MPI_Status * status) MPL_STATIC_INLINE_SUFFIX;
649 int MPIDI_NM_mpi_win_set_info(MPIR_Win * win, MPIR_Info * info);
650 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_shared_query(MPIR_Win * win, int rank,
651                                                            MPI_Aint * size, int *disp_unit,
652                                                            void *baseptr) MPL_STATIC_INLINE_SUFFIX;
653 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_put(const void *origin_addr, int origin_count,
654                                               MPI_Datatype origin_datatype, int target_rank,
655                                               MPI_Aint target_disp, int target_count,
656                                               MPI_Datatype target_datatype, MPIR_Win * win,
657                                               MPIDI_av_entry_t * addr,
658                                               MPIDI_winattr_t winattr) MPL_STATIC_INLINE_SUFFIX;
659 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_start(MPIR_Group * group, int assert,
660                                                     MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
661 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_complete(MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
662 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_post(MPIR_Group * group, int assert,
663                                                    MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
664 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_wait(MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
665 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_test(MPIR_Win * win,
666                                                    int *flag) MPL_STATIC_INLINE_SUFFIX;
667 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_lock(int lock_type, int rank, int assert,
668                                                    MPIR_Win * win,
669                                                    MPIDI_av_entry_t *
670                                                    addr) MPL_STATIC_INLINE_SUFFIX;
671 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_unlock(int rank, MPIR_Win * win,
672                                                      MPIDI_av_entry_t *
673                                                      addr) MPL_STATIC_INLINE_SUFFIX;
674 int MPIDI_NM_mpi_win_get_info(MPIR_Win * win, MPIR_Info ** info_p_p);
675 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_get(void *origin_addr, int origin_count,
676                                               MPI_Datatype origin_datatype, int target_rank,
677                                               MPI_Aint target_disp, int target_count,
678                                               MPI_Datatype target_datatype, MPIR_Win * win,
679                                               MPIDI_av_entry_t * addr,
680                                               MPIDI_winattr_t winattr) MPL_STATIC_INLINE_SUFFIX;
681 int MPIDI_NM_mpi_win_free(MPIR_Win ** win_ptr);
682 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_fence(int assert,
683                                                     MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
684 int MPIDI_NM_mpi_win_create(void *base, MPI_Aint length, int disp_unit, MPIR_Info * info,
685                             MPIR_Comm * comm_ptr, MPIR_Win ** win_ptr);
686 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_accumulate(const void *origin_addr, int origin_count,
687                                                      MPI_Datatype origin_datatype, int target_rank,
688                                                      MPI_Aint target_disp, int target_count,
689                                                      MPI_Datatype target_datatype, MPI_Op op,
690                                                      MPIR_Win * win,
691                                                      MPIDI_av_entry_t * addr,
692                                                      MPIDI_winattr_t winattr)
693     MPL_STATIC_INLINE_SUFFIX;
694 int MPIDI_NM_mpi_win_attach(MPIR_Win * win, void *base, MPI_Aint size);
695 int MPIDI_NM_mpi_win_allocate_shared(MPI_Aint size, int disp_unit, MPIR_Info * info_ptr,
696                                      MPIR_Comm * comm_ptr, void **base_ptr, MPIR_Win ** win_ptr);
697 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_rput(const void *origin_addr, int origin_count,
698                                                MPI_Datatype origin_datatype, int target_rank,
699                                                MPI_Aint target_disp, int target_count,
700                                                MPI_Datatype target_datatype, MPIR_Win * win,
701                                                MPIDI_av_entry_t * addr,
702                                                MPIDI_winattr_t winattr,
703                                                MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
704 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_flush_local(int rank, MPIR_Win * win,
705                                                           MPIDI_av_entry_t *
706                                                           addr) MPL_STATIC_INLINE_SUFFIX;
707 int MPIDI_NM_mpi_win_detach(MPIR_Win * win, const void *base);
708 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_compare_and_swap(const void *origin_addr,
709                                                            const void *compare_addr,
710                                                            void *result_addr, MPI_Datatype datatype,
711                                                            int target_rank, MPI_Aint target_disp,
712                                                            MPIR_Win * win,
713                                                            MPIDI_av_entry_t * addr,
714                                                            MPIDI_winattr_t winattr)
715     MPL_STATIC_INLINE_SUFFIX;
716 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_raccumulate(const void *origin_addr, int origin_count,
717                                                       MPI_Datatype origin_datatype, int target_rank,
718                                                       MPI_Aint target_disp, int target_count,
719                                                       MPI_Datatype target_datatype, MPI_Op op,
720                                                       MPIR_Win * win, MPIDI_av_entry_t * addr,
721                                                       MPIDI_winattr_t winattr,
722                                                       MPIR_Request **
723                                                       request) MPL_STATIC_INLINE_SUFFIX;
724 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_rget_accumulate(const void *origin_addr, int origin_count,
725                                                           MPI_Datatype origin_datatype,
726                                                           void *result_addr, int result_count,
727                                                           MPI_Datatype result_datatype,
728                                                           int target_rank, MPI_Aint target_disp,
729                                                           int target_count,
730                                                           MPI_Datatype target_datatype, MPI_Op op,
731                                                           MPIR_Win * win, MPIDI_av_entry_t * addr,
732                                                           MPIDI_winattr_t winattr,
733                                                           MPIR_Request **
734                                                           request) MPL_STATIC_INLINE_SUFFIX;
735 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_fetch_and_op(const void *origin_addr, void *result_addr,
736                                                        MPI_Datatype datatype, int target_rank,
737                                                        MPI_Aint target_disp, MPI_Op op,
738                                                        MPIR_Win * win, MPIDI_av_entry_t * addr,
739                                                        MPIDI_winattr_t winattr)
740     MPL_STATIC_INLINE_SUFFIX;
741 int MPIDI_NM_mpi_win_allocate(MPI_Aint size, int disp_unit, MPIR_Info * info, MPIR_Comm * comm,
742                               void *baseptr, MPIR_Win ** win);
743 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_flush(int rank, MPIR_Win * win,
744                                                     MPIDI_av_entry_t *
745                                                     addr) MPL_STATIC_INLINE_SUFFIX;
746 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_flush_local_all(MPIR_Win *
747                                                               win) MPL_STATIC_INLINE_SUFFIX;
748 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_unlock_all(MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
749 int MPIDI_NM_mpi_win_create_dynamic(MPIR_Info * info, MPIR_Comm * comm, MPIR_Win ** win);
750 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_rget(void *origin_addr, int origin_count,
751                                                MPI_Datatype origin_datatype, int target_rank,
752                                                MPI_Aint target_disp, int target_count,
753                                                MPI_Datatype target_datatype, MPIR_Win * win,
754                                                MPIDI_av_entry_t * addr,
755                                                MPIDI_winattr_t winattr,
756                                                MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
757 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_sync(MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
758 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_flush_all(MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
759 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_get_accumulate(const void *origin_addr, int origin_count,
760                                                          MPI_Datatype origin_datatype,
761                                                          void *result_addr, int result_count,
762                                                          MPI_Datatype result_datatype,
763                                                          int target_rank, MPI_Aint target_disp,
764                                                          int target_count,
765                                                          MPI_Datatype target_datatype, MPI_Op op,
766                                                          MPIR_Win * win,
767                                                          MPIDI_av_entry_t * addr,
768                                                          MPIDI_winattr_t winattr)
769     MPL_STATIC_INLINE_SUFFIX;
770 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_lock_all(int assert,
771                                                        MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
772 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_rank_is_local(int target,
773                                                     MPIR_Comm * comm) MPL_STATIC_INLINE_SUFFIX;
774 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_av_is_local(MPIDI_av_entry_t * av) MPL_STATIC_INLINE_SUFFIX;
775 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_barrier(MPIR_Comm * comm,
776                                                   MPIR_Errflag_t * errflag)
777     MPL_STATIC_INLINE_SUFFIX;
778 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_bcast(void *buffer, int count, MPI_Datatype datatype,
779                                                 int root, MPIR_Comm * comm,
780                                                 MPIR_Errflag_t * errflag) MPL_STATIC_INLINE_SUFFIX;
781 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_allreduce(const void *sendbuf, void *recvbuf, int count,
782                                                     MPI_Datatype datatype, MPI_Op op,
783                                                     MPIR_Comm * comm, MPIR_Errflag_t * errflag)
784     MPL_STATIC_INLINE_SUFFIX;
785 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_allgather(const void *sendbuf, int sendcount,
786                                                     MPI_Datatype sendtype, void *recvbuf,
787                                                     int recvcount, MPI_Datatype recvtype,
788                                                     MPIR_Comm * comm, MPIR_Errflag_t * errflag)
789     MPL_STATIC_INLINE_SUFFIX;
790 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_allgatherv(const void *sendbuf, int sendcount,
791                                                      MPI_Datatype sendtype, void *recvbuf,
792                                                      const int *recvcounts, const int *displs,
793                                                      MPI_Datatype recvtype, MPIR_Comm * comm,
794                                                      MPIR_Errflag_t * errflag)
795     MPL_STATIC_INLINE_SUFFIX;
796 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_scatter(const void *sendbuf, int sendcount,
797                                                   MPI_Datatype sendtype, void *recvbuf,
798                                                   int recvcount, MPI_Datatype recvtype, int root,
799                                                   MPIR_Comm * comm, MPIR_Errflag_t * errflag)
800     MPL_STATIC_INLINE_SUFFIX;
801 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_scatterv(const void *sendbuf, const int *sendcounts,
802                                                    const int *displs, MPI_Datatype sendtype,
803                                                    void *recvbuf, int recvcount,
804                                                    MPI_Datatype recvtype, int root,
805                                                    MPIR_Comm * comm_ptr,
806                                                    MPIR_Errflag_t * errflag)
807     MPL_STATIC_INLINE_SUFFIX;
808 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_gather(const void *sendbuf, int sendcount,
809                                                  MPI_Datatype sendtype, void *recvbuf,
810                                                  int recvcount, MPI_Datatype recvtype, int root,
811                                                  MPIR_Comm * comm, MPIR_Errflag_t * errflag)
812     MPL_STATIC_INLINE_SUFFIX;
813 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_gatherv(const void *sendbuf, int sendcount,
814                                                   MPI_Datatype sendtype, void *recvbuf,
815                                                   const int *recvcounts, const int *displs,
816                                                   MPI_Datatype recvtype, int root, MPIR_Comm * comm,
817                                                   MPIR_Errflag_t * errflag)
818     MPL_STATIC_INLINE_SUFFIX;
819 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_alltoall(const void *sendbuf, int sendcount,
820                                                    MPI_Datatype sendtype, void *recvbuf,
821                                                    int recvcount, MPI_Datatype recvtype,
822                                                    MPIR_Comm * comm, MPIR_Errflag_t * errflag)
823     MPL_STATIC_INLINE_SUFFIX;
824 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_alltoallv(const void *sendbuf, const int *sendcounts,
825                                                     const int *sdispls, MPI_Datatype sendtype,
826                                                     void *recvbuf, const int *recvcounts,
827                                                     const int *rdispls, MPI_Datatype recvtype,
828                                                     MPIR_Comm * comm, MPIR_Errflag_t * errflag)
829     MPL_STATIC_INLINE_SUFFIX;
830 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_alltoallw(const void *sendbuf, const int *sendcounts,
831                                                     const int *sdispls,
832                                                     const MPI_Datatype sendtypes[], void *recvbuf,
833                                                     const int *recvcounts, const int *rdispls,
834                                                     const MPI_Datatype recvtypes[],
835                                                     MPIR_Comm * comm, MPIR_Errflag_t * errflag)
836     MPL_STATIC_INLINE_SUFFIX;
837 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_reduce(const void *sendbuf, void *recvbuf, int count,
838                                                  MPI_Datatype datatype, MPI_Op op, int root,
839                                                  MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
840     MPL_STATIC_INLINE_SUFFIX;
841 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_reduce_scatter(const void *sendbuf, void *recvbuf,
842                                                          const int *recvcounts,
843                                                          MPI_Datatype datatype, MPI_Op op,
844                                                          MPIR_Comm * comm_ptr,
845                                                          MPIR_Errflag_t * errflag)
846     MPL_STATIC_INLINE_SUFFIX;
847 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_reduce_scatter_block(const void *sendbuf, void *recvbuf,
848                                                                int recvcount, MPI_Datatype datatype,
849                                                                MPI_Op op,
850                                                                MPIR_Comm * comm_ptr,
851                                                                MPIR_Errflag_t * errflag)
852     MPL_STATIC_INLINE_SUFFIX;
853 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_scan(const void *sendbuf, void *recvbuf, int count,
854                                                MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
855                                                MPIR_Errflag_t * errflag) MPL_STATIC_INLINE_SUFFIX;
856 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_exscan(const void *sendbuf, void *recvbuf, int count,
857                                                  MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
858                                                  MPIR_Errflag_t * errflag) MPL_STATIC_INLINE_SUFFIX;
859 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_neighbor_allgather(const void *sendbuf, int sendcount,
860                                                              MPI_Datatype sendtype, void *recvbuf,
861                                                              int recvcount, MPI_Datatype recvtype,
862                                                              MPIR_Comm *
863                                                              comm) MPL_STATIC_INLINE_SUFFIX;
864 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_neighbor_allgatherv(const void *sendbuf, int sendcount,
865                                                               MPI_Datatype sendtype, void *recvbuf,
866                                                               const int *recvcounts,
867                                                               const int *displs,
868                                                               MPI_Datatype recvtype,
869                                                               MPIR_Comm *
870                                                               comm) MPL_STATIC_INLINE_SUFFIX;
871 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_neighbor_alltoallv(const void *sendbuf,
872                                                              const int *sendcounts,
873                                                              const int *sdispls,
874                                                              MPI_Datatype sendtype, void *recvbuf,
875                                                              const int *recvcounts,
876                                                              const int *rdispls,
877                                                              MPI_Datatype recvtype,
878                                                              MPIR_Comm *
879                                                              comm) MPL_STATIC_INLINE_SUFFIX;
880 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_neighbor_alltoallw(const void *sendbuf,
881                                                              const int *sendcounts,
882                                                              const MPI_Aint * sdispls,
883                                                              const MPI_Datatype * sendtypes,
884                                                              void *recvbuf, const int *recvcounts,
885                                                              const MPI_Aint * rdispls,
886                                                              const MPI_Datatype * recvtypes,
887                                                              MPIR_Comm *
888                                                              comm) MPL_STATIC_INLINE_SUFFIX;
889 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_neighbor_alltoall(const void *sendbuf, int sendcount,
890                                                             MPI_Datatype sendtype, void *recvbuf,
891                                                             int recvcount, MPI_Datatype recvtype,
892                                                             MPIR_Comm *
893                                                             comm) MPL_STATIC_INLINE_SUFFIX;
894 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ineighbor_allgather(const void *sendbuf, int sendcount,
895                                                               MPI_Datatype sendtype, void *recvbuf,
896                                                               int recvcount, MPI_Datatype recvtype,
897                                                               MPIR_Comm * comm,
898                                                               MPIR_Request **
899                                                               req) MPL_STATIC_INLINE_SUFFIX;
900 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ineighbor_allgatherv(const void *sendbuf, int sendcount,
901                                                                MPI_Datatype sendtype, void *recvbuf,
902                                                                const int *recvcounts,
903                                                                const int *displs,
904                                                                MPI_Datatype recvtype,
905                                                                MPIR_Comm * comm,
906                                                                MPIR_Request **
907                                                                req) MPL_STATIC_INLINE_SUFFIX;
908 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ineighbor_alltoall(const void *sendbuf, int sendcount,
909                                                              MPI_Datatype sendtype, void *recvbuf,
910                                                              int recvcount, MPI_Datatype recvtype,
911                                                              MPIR_Comm * comm,
912                                                              MPIR_Request **
913                                                              req) MPL_STATIC_INLINE_SUFFIX;
914 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ineighbor_alltoallv(const void *sendbuf,
915                                                               const int *sendcounts,
916                                                               const int *sdispls,
917                                                               MPI_Datatype sendtype, void *recvbuf,
918                                                               const int *recvcounts,
919                                                               const int *rdispls,
920                                                               MPI_Datatype recvtype,
921                                                               MPIR_Comm * comm,
922                                                               MPIR_Request **
923                                                               req) MPL_STATIC_INLINE_SUFFIX;
924 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ineighbor_alltoallw(const void *sendbuf,
925                                                               const int *sendcounts,
926                                                               const MPI_Aint * sdispls,
927                                                               const MPI_Datatype * sendtypes,
928                                                               void *recvbuf, const int *recvcounts,
929                                                               const MPI_Aint * rdispls,
930                                                               const MPI_Datatype * recvtypes,
931                                                               MPIR_Comm * comm,
932                                                               MPIR_Request **
933                                                               req) MPL_STATIC_INLINE_SUFFIX;
934 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ibarrier(MPIR_Comm * comm,
935                                                    MPIR_Request ** req) MPL_STATIC_INLINE_SUFFIX;
936 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ibcast(void *buffer, int count, MPI_Datatype datatype,
937                                                  int root, MPIR_Comm * comm,
938                                                  MPIR_Request ** req) MPL_STATIC_INLINE_SUFFIX;
939 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iallgather(const void *sendbuf, int sendcount,
940                                                      MPI_Datatype sendtype, void *recvbuf,
941                                                      int recvcount, MPI_Datatype recvtype,
942                                                      MPIR_Comm * comm,
943                                                      MPIR_Request ** req) MPL_STATIC_INLINE_SUFFIX;
944 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iallgatherv(const void *sendbuf, int sendcount,
945                                                       MPI_Datatype sendtype, void *recvbuf,
946                                                       const int *recvcounts, const int *displs,
947                                                       MPI_Datatype recvtype, MPIR_Comm * comm,
948                                                       MPIR_Request ** req) MPL_STATIC_INLINE_SUFFIX;
949 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iallreduce(const void *sendbuf, void *recvbuf, int count,
950                                                      MPI_Datatype datatype, MPI_Op op,
951                                                      MPIR_Comm * comm,
952                                                      MPIR_Request ** req) MPL_STATIC_INLINE_SUFFIX;
953 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ialltoall(const void *sendbuf, int sendcount,
954                                                     MPI_Datatype sendtype, void *recvbuf,
955                                                     int recvcount, MPI_Datatype recvtype,
956                                                     MPIR_Comm * comm,
957                                                     MPIR_Request ** req) MPL_STATIC_INLINE_SUFFIX;
958 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ialltoallv(const void *sendbuf, const int *sendcounts,
959                                                      const int *sdispls, MPI_Datatype sendtype,
960                                                      void *recvbuf, const int *recvcounts,
961                                                      const int *rdispls, MPI_Datatype recvtype,
962                                                      MPIR_Comm * comm,
963                                                      MPIR_Request ** req) MPL_STATIC_INLINE_SUFFIX;
964 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ialltoallw(const void *sendbuf, const int *sendcounts,
965                                                      const int *sdispls,
966                                                      const MPI_Datatype sendtypes[], void *recvbuf,
967                                                      const int *recvcounts, const int *rdispls,
968                                                      const MPI_Datatype recvtypes[],
969                                                      MPIR_Comm * comm,
970                                                      MPIR_Request ** req) MPL_STATIC_INLINE_SUFFIX;
971 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iexscan(const void *sendbuf, void *recvbuf, int count,
972                                                   MPI_Datatype datatype, MPI_Op op,
973                                                   MPIR_Comm * comm,
974                                                   MPIR_Request ** req) MPL_STATIC_INLINE_SUFFIX;
975 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_igather(const void *sendbuf, int sendcount,
976                                                   MPI_Datatype sendtype, void *recvbuf,
977                                                   int recvcount, MPI_Datatype recvtype, int root,
978                                                   MPIR_Comm * comm,
979                                                   MPIR_Request ** req) MPL_STATIC_INLINE_SUFFIX;
980 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_igatherv(const void *sendbuf, int sendcount,
981                                                    MPI_Datatype sendtype, void *recvbuf,
982                                                    const int *recvcounts, const int *displs,
983                                                    MPI_Datatype recvtype, int root,
984                                                    MPIR_Comm * comm,
985                                                    MPIR_Request ** req) MPL_STATIC_INLINE_SUFFIX;
986 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ireduce_scatter_block(const void *sendbuf, void *recvbuf,
987                                                                 int recvcount,
988                                                                 MPI_Datatype datatype, MPI_Op op,
989                                                                 MPIR_Comm * comm,
990                                                                 MPIR_Request **
991                                                                 req) MPL_STATIC_INLINE_SUFFIX;
992 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ireduce_scatter(const void *sendbuf, void *recvbuf,
993                                                           const int *recvcounts,
994                                                           MPI_Datatype datatype, MPI_Op op,
995                                                           MPIR_Comm * comm,
996                                                           MPIR_Request **
997                                                           req) MPL_STATIC_INLINE_SUFFIX;
998 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ireduce(const void *sendbuf, void *recvbuf, int count,
999                                                   MPI_Datatype datatype, MPI_Op op, int root,
1000                                                   MPIR_Comm * comm_ptr,
1001                                                   MPIR_Request ** req) MPL_STATIC_INLINE_SUFFIX;
1002 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iscan(const void *sendbuf, void *recvbuf, int count,
1003                                                 MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
1004                                                 MPIR_Request ** req) MPL_STATIC_INLINE_SUFFIX;
1005 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iscatter(const void *sendbuf, int sendcount,
1006                                                    MPI_Datatype sendtype, void *recvbuf,
1007                                                    int recvcount, MPI_Datatype recvtype, int root,
1008                                                    MPIR_Comm * comm,
1009                                                    MPIR_Request ** req) MPL_STATIC_INLINE_SUFFIX;
1010 MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iscatterv(const void *sendbuf, const int *sendcounts,
1011                                                     const int *displs, MPI_Datatype sendtype,
1012                                                     void *recvbuf, int recvcount,
1013                                                     MPI_Datatype recvtype, int root,
1014                                                     MPIR_Comm * comm_ptr,
1015                                                     MPIR_Request ** req) MPL_STATIC_INLINE_SUFFIX;
1016 int MPIDI_NM_mpi_type_commit_hook(MPIR_Datatype * datatype_p);
1017 int MPIDI_NM_mpi_type_free_hook(MPIR_Datatype * datatype_p);
1018 int MPIDI_NM_mpi_op_commit_hook(MPIR_Op * op_p);
1019 int MPIDI_NM_mpi_op_free_hook(MPIR_Op * op_p);
1020 
1021 #endif /* NETMOD_H_INCLUDED */
1022