1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 #ifndef BTL_PORTALS_H_HAS_BEEN_INCLUDED
25 #define BTL_PORTALS_H_HAS_BEEN_INCLUDED
26
27 #include <portals4.h>
28 #include <btl_portals4_frag.h>
29
30 #include "opal/class/opal_free_list.h"
31 #include "opal/class/opal_list.h"
32 #include "opal/datatype/opal_convertor.h"
33 #include "opal/mca/btl/btl.h"
34 #include "opal/mca/btl/base/base.h"
35 #include "opal/mca/btl/base/btl_base_error.h"
36
37 BEGIN_C_DECLS
38
39
40
41
42 struct mca_btl_portals4_component_t {
43
44 mca_btl_base_component_2_0_0_t super;
45
46 unsigned int num_btls;
47 unsigned int max_btls;
48
49 struct mca_btl_portals4_module_t** btls;
50
51
52 int need_init;
53
54
55 int use_logical;
56
57
58 int portals_free_list_init_num;
59
60 int portals_free_list_max_num;
61
62 int portals_free_list_inc_num;
63
64
65 int portals_free_list_eager_max_num;
66
67
68 int portals_need_ack;
69
70
71 int recv_queue_size;
72
73
74 int32_t portals_max_outstanding_ops;
75
76
77 int portals_recv_mds_num;
78 int portals_recv_mds_size;
79
80
81 ptl_handle_eq_t *eqs_h;
82
83
84 unsigned long portals_max_msg_size;
85 };
86
87 typedef struct mca_btl_portals4_component_t mca_btl_portals4_component_t;
88
89 struct mca_btl_portals4_module_t {
90
91 mca_btl_base_module_t super;
92
93
94
95 opal_atomic_int32_t portals_num_procs;
96
97
98 uint32_t interface_num;
99
100
101 opal_free_list_t portals_frag_eager;
102 opal_free_list_t portals_frag_max;
103 opal_free_list_t portals_frag_user;
104
105 opal_list_t portals_recv_blocks;
106
107
108 int recv_queue_size;
109
110
111 ptl_handle_eq_t recv_eq_h;
112
113
114 opal_atomic_int32_t portals_outstanding_ops;
115 int32_t portals_max_outstanding_ops;
116
117
118 opal_atomic_int64_t portals_rdma_key;
119
120
121 ptl_handle_ni_t portals_ni_h;
122
123
124 ptl_pt_index_t recv_idx;
125
126
127 ptl_handle_md_t zero_md_h;
128
129
130 ptl_handle_md_t send_md_h;
131
132
133
134 ptl_handle_me_t long_overflow_me_h;
135 };
136
137 typedef struct mca_btl_portals4_module_t mca_btl_portals4_module_t;
138
139
140
141
142
143
144
145
146
147
148 #define BTL_PORTALS4_PROTOCOL_MASK 0xF000000000000000ULL
149 #define BTL_PORTALS4_CONTEXT_MASK 0x0FFF000000000000ULL
150 #define BTL_PORTALS4_SOURCE_MASK 0x0000FFFF00000000ULL
151 #define BTL_PORTALS4_TAG_MASK 0x00000000FFFFFFFFULL
152
153 #define BTL_PORTALS4_PROTOCOL_IGNR BTL_PORTALS4_PROTOCOL_MASK
154 #define BTL_PORTALS4_CONTEXT_IGNR BTL_PORTALS4_CONTEXT_MASK
155 #define BTL_PORTALS4_SOURCE_IGNR BTL_PORTALS4_SOURCE_MASK
156 #define BTL_PORTALS4_TAG_IGNR 0x000000007FFFFFFFULL
157
158 #define BTL_PORTALS4_SHORT_MSG 0x1000000000000000ULL
159 #define BTL_PORTALS4_LONG_MSG 0x2000000000000000ULL
160
161
162 #define BTL_PORTALS4_SET_SEND_BITS(match_bits, contextid, source, tag, type) \
163 { \
164 match_bits = contextid; \
165 match_bits = (match_bits << 16); \
166 match_bits |= source; \
167 match_bits = (match_bits << 32); \
168 match_bits |= (BTL_PORTALS4_TAG_MASK & tag) | type; \
169 }
170
171 #define BTL_PORTALS4_SET_HDR_DATA(hdr_data, opcount, length, sync) \
172 { \
173 hdr_data = (sync) ? 1 : 0; \
174 hdr_data = (hdr_data << 15); \
175 hdr_data |= opcount & 0x7FFFULL; \
176 hdr_data = (hdr_data << 48); \
177 hdr_data |= (length & 0xFFFFFFFFFFFFULL); \
178 }
179
180 #define REQ_BTL_TABLE_ID 2
181
182 int mca_btl_portals4_component_progress(void);
183 void mca_btl_portals4_free_module(mca_btl_portals4_module_t *portals4_btl);
184
185
186 int mca_btl_portals4_finalize(struct mca_btl_base_module_t* btl_base);
187
188
189 int mca_btl_portals4_add_procs(struct mca_btl_base_module_t* btl_base,
190 size_t nprocs,
191 struct opal_proc_t **procs,
192 struct mca_btl_base_endpoint_t** peers,
193 opal_bitmap_t* reachable);
194
195 int mca_btl_portals4_del_procs(struct mca_btl_base_module_t* btl_base,
196 size_t nprocs,
197 struct opal_proc_t **procs,
198 struct mca_btl_base_endpoint_t** peers);
199
200 mca_btl_base_descriptor_t*
201 mca_btl_portals4_alloc(struct mca_btl_base_module_t* btl_base,
202 struct mca_btl_base_endpoint_t* endpoint,
203 uint8_t order,
204 size_t size,
205 uint32_t flags);
206
207 int mca_btl_portals4_free(struct mca_btl_base_module_t* btl_base,
208 mca_btl_base_descriptor_t* des);
209
210 mca_btl_base_descriptor_t*
211 mca_btl_portals4_prepare_src(struct mca_btl_base_module_t* btl_base,
212 struct mca_btl_base_endpoint_t* peer,
213 struct opal_convertor_t* convertor,
214 uint8_t order,
215 size_t reserve,
216 size_t* size,
217 uint32_t flags);
218
219 int mca_btl_portals4_send(struct mca_btl_base_module_t* btl_base,
220 struct mca_btl_base_endpoint_t* btl_peer,
221 struct mca_btl_base_descriptor_t* descriptor,
222 mca_btl_base_tag_t tag);
223
224
225 int mca_btl_portals4_sendi(struct mca_btl_base_module_t* btl_base,
226 struct mca_btl_base_endpoint_t* endpoint,
227 struct opal_convertor_t* convertor,
228 void* header,
229 size_t header_size,
230 size_t payload_size,
231 uint8_t order,
232 uint32_t flags,
233 mca_btl_base_tag_t tag,
234 mca_btl_base_descriptor_t** des);
235
236 int mca_btl_portals4_put(struct mca_btl_base_module_t* btl_base,
237 struct mca_btl_base_endpoint_t* btl_peer,
238 struct mca_btl_base_descriptor_t* decriptor);
239
240
241 int mca_btl_portals4_get(struct mca_btl_base_module_t* btl_base,
242 struct mca_btl_base_endpoint_t* btl_peer,
243 void *local_address,
244 uint64_t remote_address,
245 struct mca_btl_base_registration_handle_t *local_handle,
246 struct mca_btl_base_registration_handle_t *remote_handle,
247 size_t size,
248 int flags,
249 int order,
250 mca_btl_base_rdma_completion_fn_t cbfunc,
251 void *cbcontext,
252 void *cbdata);
253
254 int mca_btl_portals4_get_error(int ptl_error);
255
256 struct mca_btl_base_registration_handle_t {
257
258 ptl_match_bits_t key;
259
260 ptl_handle_me_t me_h;
261
262 ptl_size_t remote_offset;
263 };
264
265
266
267
268 OPAL_MODULE_DECLSPEC extern mca_btl_portals4_component_t mca_btl_portals4_component;
269 extern mca_btl_portals4_module_t mca_btl_portals4_module;
270
271
272
273
274
275
276
277 struct mca_btl_base_endpoint_t {
278 ptl_process_t ptl_proc;
279 };
280 typedef struct mca_btl_base_endpoint_t mca_btl_base_endpoint_t;
281
282 END_C_DECLS
283
284 #endif