1 /*
2  * Copyright (C) by Argonne National Laboratory
3  *     See COPYRIGHT in top-level directory
4  */
5 
6 #ifndef SHM_AM_H_INCLUDED
7 #define SHM_AM_H_INCLUDED
8 
9 #include <shm.h>
10 #include "../posix/shm_inline.h"
11 #include "../ipc/src/shm_inline.h"
12 
MPIDI_SHM_am_send_hdr(int rank,MPIR_Comm * comm,int handler_id,const void * am_hdr,size_t am_hdr_sz)13 MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_am_send_hdr(int rank, MPIR_Comm * comm,
14                                                    int handler_id, const void *am_hdr,
15                                                    size_t am_hdr_sz)
16 {
17     int ret;
18 
19     MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_SEND_HDR);
20     MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_SEND_HDR);
21 
22     ret = MPIDI_POSIX_am_send_hdr(rank, comm, MPIDI_POSIX_AM_HDR_CH4,
23                                   handler_id, am_hdr, am_hdr_sz);
24 
25     MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_SEND_HDR);
26     return ret;
27 }
28 
MPIDI_SHM_am_isend(int rank,MPIR_Comm * comm,int handler_id,const void * am_hdr,size_t am_hdr_sz,const void * data,MPI_Count count,MPI_Datatype datatype,MPIR_Request * sreq)29 MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_am_isend(int rank, MPIR_Comm * comm, int handler_id,
30                                                 const void *am_hdr, size_t am_hdr_sz,
31                                                 const void *data, MPI_Count count,
32                                                 MPI_Datatype datatype, MPIR_Request * sreq)
33 {
34     int ret;
35 
36     MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_ISEND);
37     MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_ISEND);
38 
39     ret = MPIDI_POSIX_am_isend(rank, comm, MPIDI_POSIX_AM_HDR_CH4, handler_id, am_hdr,
40                                am_hdr_sz, data, count, datatype, sreq);
41 
42     MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_ISEND);
43     return ret;
44 }
45 
MPIDI_SHM_am_isendv(int rank,MPIR_Comm * comm,int handler_id,struct iovec * am_hdrs,size_t iov_len,const void * data,MPI_Count count,MPI_Datatype datatype,MPIR_Request * sreq)46 MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_am_isendv(int rank, MPIR_Comm * comm, int handler_id,
47                                                  struct iovec *am_hdrs, size_t iov_len,
48                                                  const void *data, MPI_Count count,
49                                                  MPI_Datatype datatype, MPIR_Request * sreq)
50 {
51     int ret;
52 
53     MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_ISENDV);
54     MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_ISENDV);
55 
56     ret = MPIDI_POSIX_am_isendv(rank, comm, MPIDI_POSIX_AM_HDR_CH4, handler_id, am_hdrs,
57                                 iov_len, data, count, datatype, sreq);
58 
59     MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_ISENDV);
60     return ret;
61 }
62 
MPIDI_SHM_am_send_hdr_reply(MPIR_Context_id_t context_id,int src_rank,int handler_id,const void * am_hdr,size_t am_hdr_sz)63 MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_am_send_hdr_reply(MPIR_Context_id_t context_id,
64                                                          int src_rank, int handler_id,
65                                                          const void *am_hdr, size_t am_hdr_sz)
66 {
67     int ret;
68 
69     MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_SEND_HDR_REPLY);
70     MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_SEND_HDR_REPLY);
71 
72     ret = MPIDI_POSIX_am_send_hdr_reply(context_id, src_rank, MPIDI_POSIX_AM_HDR_CH4,
73                                         handler_id, am_hdr, am_hdr_sz);
74 
75     MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_SEND_HDR_REPLY);
76     return ret;
77 }
78 
MPIDI_SHM_am_isend_reply(MPIR_Context_id_t context_id,int src_rank,int handler_id,const void * am_hdr,size_t am_hdr_sz,const void * data,MPI_Count count,MPI_Datatype datatype,MPIR_Request * sreq)79 MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_am_isend_reply(MPIR_Context_id_t context_id,
80                                                       int src_rank, int handler_id,
81                                                       const void *am_hdr, size_t am_hdr_sz,
82                                                       const void *data, MPI_Count count,
83                                                       MPI_Datatype datatype, MPIR_Request * sreq)
84 {
85     int ret;
86 
87     MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_ISEND_REPLY);
88     MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_ISEND_REPLY);
89 
90     ret = MPIDI_POSIX_am_isend_reply(context_id, src_rank, MPIDI_POSIX_AM_HDR_CH4,
91                                      handler_id, am_hdr, am_hdr_sz, data, count, datatype, sreq);
92 
93     MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_ISEND_REPLY);
94     return ret;
95 }
96 
MPIDI_SHM_am_hdr_max_sz(void)97 MPL_STATIC_INLINE_PREFIX size_t MPIDI_SHM_am_hdr_max_sz(void)
98 {
99     int ret;
100 
101     MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_HDR_MAX_SZ);
102     MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_HDR_MAX_SZ);
103 
104     ret = MPIDI_POSIX_am_hdr_max_sz();
105 
106     MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_HDR_MAX_SZ);
107     return ret;
108 }
109 
MPIDI_SHM_am_eager_limit(void)110 MPL_STATIC_INLINE_PREFIX size_t MPIDI_SHM_am_eager_limit(void)
111 {
112     return MPIDI_POSIX_am_eager_limit();
113 }
114 
MPIDI_SHM_am_eager_buf_limit(void)115 MPL_STATIC_INLINE_PREFIX size_t MPIDI_SHM_am_eager_buf_limit(void)
116 {
117     return MPIDI_POSIX_am_eager_buf_limit();
118 }
119 
MPIDI_SHM_am_request_init(MPIR_Request * req)120 MPL_STATIC_INLINE_PREFIX void MPIDI_SHM_am_request_init(MPIR_Request * req)
121 {
122     MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_REQUEST_INIT);
123     MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_REQUEST_INIT);
124 
125     MPIDI_SHM_REQUEST(req, status) = 0;
126     MPIDI_POSIX_am_request_init(req);
127 
128     MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_REQUEST_INIT);
129 }
130 
MPIDI_SHM_am_request_finalize(MPIR_Request * req)131 MPL_STATIC_INLINE_PREFIX void MPIDI_SHM_am_request_finalize(MPIR_Request * req)
132 {
133     MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_REQUEST_FINALIZE);
134     MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_REQUEST_FINALIZE);
135 
136     MPIDI_POSIX_am_request_finalize(req);
137 
138     MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_REQUEST_FINALIZE);
139 }
140 
141 #endif /* SHM_AM_H_INCLUDED */
142