@@ -325,10 +325,18 @@ ompi_mtl_ofi_isend_callback(struct fi_cq_tagged_entry *wc,
325
325
return OMPI_SUCCESS ;
326
326
}
327
327
328
- #define MTL_OFI_MAP_COMM_TO_CONTEXT (comm_id , ctxt_id ) \
329
- do { \
330
- ctxt_id = ompi_mtl_ofi.comm_to_context[comm_id]; \
331
- } while (0);
328
+ /* Return OFI context ID associated with the specific communicator */
329
+ __opal_attribute_always_inline__ static inline int
330
+ ompi_mtl_ofi_map_comm_to_ctxt (uint32_t comm_id )
331
+ {
332
+ /* For non-thread-grouping use case, only one context is used which is
333
+ * associated to MPI_COMM_WORLD, so use that. */
334
+ if (0 == ompi_mtl_ofi .thread_grouping ) {
335
+ comm_id = 0 ;
336
+ }
337
+
338
+ return ompi_mtl_ofi .comm_to_context [comm_id ];
339
+ }
332
340
333
341
__opal_attribute_always_inline__ static inline int
334
342
ompi_mtl_ofi_ssend_recv (ompi_mtl_ofi_request_t * ack_req ,
@@ -342,7 +350,7 @@ ompi_mtl_ofi_ssend_recv(ompi_mtl_ofi_request_t *ack_req,
342
350
ssize_t ret = OMPI_SUCCESS ;
343
351
int ctxt_id = 0 ;
344
352
345
- MTL_OFI_MAP_COMM_TO_CONTEXT (comm -> c_contextid , ctxt_id );
353
+ ctxt_id = ompi_mtl_ofi_map_comm_to_ctxt (comm -> c_contextid );
346
354
set_thread_context (ctxt_id );
347
355
348
356
ack_req = malloc (sizeof (ompi_mtl_ofi_request_t ));
@@ -397,7 +405,7 @@ ompi_mtl_ofi_send_generic(struct mca_mtl_base_module_t *mtl,
397
405
fi_addr_t src_addr = 0 ;
398
406
fi_addr_t sep_peer_fiaddr = 0 ;
399
407
400
- MTL_OFI_MAP_COMM_TO_CONTEXT (comm -> c_contextid , ctxt_id );
408
+ ctxt_id = ompi_mtl_ofi_map_comm_to_ctxt (comm -> c_contextid );
401
409
set_thread_context (ctxt_id );
402
410
403
411
/**
@@ -532,7 +540,7 @@ ompi_mtl_ofi_isend_generic(struct mca_mtl_base_module_t *mtl,
532
540
ompi_mtl_ofi_request_t * ack_req = NULL ; /* For synchronous send */
533
541
fi_addr_t sep_peer_fiaddr = 0 ;
534
542
535
- MTL_OFI_MAP_COMM_TO_CONTEXT (comm -> c_contextid , ctxt_id );
543
+ ctxt_id = ompi_mtl_ofi_map_comm_to_ctxt (comm -> c_contextid );
536
544
set_thread_context (ctxt_id );
537
545
538
546
ofi_req -> event_callback = ompi_mtl_ofi_isend_callback ;
@@ -617,7 +625,7 @@ ompi_mtl_ofi_recv_callback(struct fi_cq_tagged_entry *wc,
617
625
ompi_status_public_t * status = NULL ;
618
626
struct fi_msg_tagged tagged_msg ;
619
627
620
- MTL_OFI_MAP_COMM_TO_CONTEXT (ofi_req -> comm -> c_contextid , ctxt_id );
628
+ ctxt_id = ompi_mtl_ofi_map_comm_to_ctxt (ofi_req -> comm -> c_contextid );
621
629
622
630
assert (ofi_req -> super .ompi_req );
623
631
status = & ofi_req -> super .ompi_req -> req_status ;
@@ -758,7 +766,7 @@ ompi_mtl_ofi_irecv_generic(struct mca_mtl_base_module_t *mtl,
758
766
size_t length ;
759
767
bool free_after ;
760
768
761
- MTL_OFI_MAP_COMM_TO_CONTEXT (comm -> c_contextid , ctxt_id );
769
+ ctxt_id = ompi_mtl_ofi_map_comm_to_ctxt (comm -> c_contextid );
762
770
set_thread_context (ctxt_id );
763
771
764
772
if (ofi_cq_data ) {
@@ -884,7 +892,7 @@ ompi_mtl_ofi_imrecv(struct mca_mtl_base_module_t *mtl,
884
892
uint64_t msgflags = FI_CLAIM | FI_COMPLETION ;
885
893
struct ompi_communicator_t * comm = (* message )-> comm ;
886
894
887
- MTL_OFI_MAP_COMM_TO_CONTEXT (comm -> c_contextid , ctxt_id );
895
+ ctxt_id = ompi_mtl_ofi_map_comm_to_ctxt (comm -> c_contextid );
888
896
set_thread_context (ctxt_id );
889
897
890
898
ompi_ret = ompi_mtl_datatype_recv_buf (convertor ,
@@ -977,7 +985,7 @@ ompi_mtl_ofi_iprobe_generic(struct mca_mtl_base_module_t *mtl,
977
985
uint64_t msgflags = FI_PEEK | FI_COMPLETION ;
978
986
int ctxt_id = 0 ;
979
987
980
- MTL_OFI_MAP_COMM_TO_CONTEXT (comm -> c_contextid , ctxt_id );
988
+ ctxt_id = ompi_mtl_ofi_map_comm_to_ctxt (comm -> c_contextid );
981
989
set_thread_context (ctxt_id );
982
990
983
991
if (ofi_cq_data ) {
@@ -1066,7 +1074,7 @@ ompi_mtl_ofi_improbe_generic(struct mca_mtl_base_module_t *mtl,
1066
1074
uint64_t msgflags = FI_PEEK | FI_CLAIM | FI_COMPLETION ;
1067
1075
int ctxt_id = 0 ;
1068
1076
1069
- MTL_OFI_MAP_COMM_TO_CONTEXT (comm -> c_contextid , ctxt_id );
1077
+ ctxt_id = ompi_mtl_ofi_map_comm_to_ctxt (comm -> c_contextid );
1070
1078
set_thread_context (ctxt_id );
1071
1079
1072
1080
ofi_req = malloc (sizeof * ofi_req );
@@ -1168,7 +1176,7 @@ ompi_mtl_ofi_cancel(struct mca_mtl_base_module_t *mtl,
1168
1176
int ret , ctxt_id = 0 ;
1169
1177
ompi_mtl_ofi_request_t * ofi_req = (ompi_mtl_ofi_request_t * ) mtl_request ;
1170
1178
1171
- MTL_OFI_MAP_COMM_TO_CONTEXT (ofi_req -> comm -> c_contextid , ctxt_id );
1179
+ ctxt_id = ompi_mtl_ofi_map_comm_to_ctxt (ofi_req -> comm -> c_contextid );
1172
1180
1173
1181
switch (ofi_req -> type ) {
1174
1182
case OMPI_MTL_OFI_SEND :
0 commit comments