@@ -34,28 +34,17 @@ ATTRIBUTE((unused));
3434#define MPIDI_OFI_COMM_TO_INDEX (comm ,rank ) \
3535 MPIDIU_comm_rank_to_pid(comm, rank, NULL, NULL)
3636
37- #define MPIDI_OFI_AV_ROOT_ADDR (av ) MPIDI_OFI_AV(av).root_dest
38-
39- /* NOTE: these macros are a mess to read. They will be cleaned up in a few commits. */
4037#ifdef MPIDI_OFI_VNI_USE_DOMAIN
4138#define MPIDI_OFI_AV_ADDR_ROOT (av ) \
4239 MPIDI_OFI_AV(av).root_dest
43- #define MPIDI_OFI_AV_ADDR_OFFSET (av , vci , nic ) \
44- (MPIDI_OFI_AV(av).all_dest[(vci)*MPIDI_OFI_global.num_nics+(nic)] + MPIDI_OFI_AV(av).root_offset)
45- #define MPIDI_OFI_AV_ADDR_NO_OFFSET (av , vci , nic ) \
40+ #define MPIDI_OFI_AV_ADDR_NONROOT (av , vci , nic ) \
4641 MPIDI_OFI_AV(av).all_dest[(vci)*MPIDI_OFI_global.num_nics+(nic)]
4742#else /* scalable endpoints - all vci share the same addr */
4843#define MPIDI_OFI_AV_ADDR_ROOT (av ) \
4944 MPIDI_OFI_AV(av).root_dest
50- #define MPIDI_OFI_AV_ADDR_OFFSET (av , vci , nic ) \
51- (MPIDI_OFI_AV(av).all_dest[nic] + MPIDI_OFI_AV(av).root_offset)
52- #define MPIDI_OFI_AV_ADDR_NO_OFFSET (av , vci , nic ) \
45+ #define MPIDI_OFI_AV_ADDR_NONROOT (av , vci , nic ) \
5346 MPIDI_OFI_AV(av).all_dest[nic]
5447#endif
55- #define MPIDI_OFI_AV_ADDR (av , local_vci , local_nic , vci , nic ) \
56- ((local_vci==0 && local_nic==0) ? \
57- ((vci == 0 && nic == 0) ? MPIDI_OFI_AV_ADDR_ROOT(av) : MPIDI_OFI_AV_ADDR_OFFSET(av, vci, nic)) : \
58- MPIDI_OFI_AV_ADDR_NO_OFFSET(av, vci, nic))
5948
6049#define MPIDI_OFI_WIN (win ) ((win)->dev.netmod.ofi)
6150
@@ -465,7 +454,20 @@ MPL_STATIC_INLINE_PREFIX fi_addr_t MPIDI_OFI_av_to_phys(MPIDI_av_entry_t * av,
465454 int local_vci , int local_nic ,
466455 int vci , int nic )
467456{
468- fi_addr_t dest = MPIDI_OFI_AV_ADDR (av , local_vci , local_nic , vci , nic );
457+ fi_addr_t dest ;
458+ if (local_vci == 0 && local_nic == 0 ) {
459+ if (vci == 0 && nic == 0 ) {
460+ /* root_dest */
461+ dest = MPIDI_OFI_AV_ADDR_ROOT (av );
462+ } else {
463+ /* remote endpoints share the same address except on local root endpoint which have an offset */
464+ dest = MPIDI_OFI_AV_ADDR_NONROOT (av , vci , nic ) + MPIDI_OFI_AV (av ).root_offset ;
465+ }
466+ } else {
467+ /* all_dest[*] */
468+ dest = MPIDI_OFI_AV_ADDR_NONROOT (av , vci , nic );
469+ }
470+
469471#ifdef MPIDI_OFI_VNI_USE_DOMAIN
470472 if (MPIDI_OFI_ENABLE_SCALABLE_ENDPOINTS ) {
471473 return fi_rx_addr (dest , 0 , MPIDI_OFI_MAX_ENDPOINTS_BITS );
0 commit comments