Skip to content

Commit fc11664

Browse files
committed
ch4/ofi: clean up MPIDI_OFI_AV_ADDR macros
The MPIDI_OFI_AV_ADDR macros are difficult to read. It is only used in MPIDI_OFI_av_to_phys and addr_exchange. Expand the macro in both places so it can use if/else and add proper comments. Also replace the redundant macro MPIDI_OFI_AV_ROOT_ADDR, which is the same as MPIDI_OFI_AV_ADDR_ROOT.
1 parent 77dae93 commit fc11664

File tree

5 files changed

+25
-22
lines changed

5 files changed

+25
-22
lines changed

src/mpid/ch4/netmod/ofi/init_addrxchg.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ int MPIDI_OFI_addr_exchange_root_ctx(void)
8181

8282
for (int i = 0; i < num_nodes; i++) {
8383
MPIR_Assert(mapped_table[i] != FI_ADDR_NOTAVAIL);
84-
MPIDI_OFI_AV_ROOT_ADDR(&MPIDIU_get_av(0, node_roots[i])) = mapped_table[i];
84+
MPIDI_OFI_AV_ADDR_ROOT(&MPIDIU_get_av(0, node_roots[i])) = mapped_table[i];
8585
}
8686
MPL_free(mapped_table);
8787
/* Then, allgather all address names using init_comm */
@@ -97,7 +97,7 @@ int MPIDI_OFI_addr_exchange_root_ctx(void)
9797
char *addrname = (char *) table + recv_bc_len * rank_map[i];
9898
MPIDI_OFI_CALL(fi_av_insert(MPIDI_OFI_global.ctx[0].av,
9999
addrname, 1, &addr, 0ULL, NULL), avmap);
100-
MPIDI_OFI_AV_ROOT_ADDR(&MPIDIU_get_av(0, i)) = addr;
100+
MPIDI_OFI_AV_ADDR_ROOT(&MPIDIU_get_av(0, i)) = addr;
101101
}
102102
}
103103
mpi_errno = MPIDU_bc_table_destroy();
@@ -111,7 +111,7 @@ int MPIDI_OFI_addr_exchange_root_ctx(void)
111111

112112
for (int i = 0; i < size; i++) {
113113
MPIR_Assert(mapped_table[i] != FI_ADDR_NOTAVAIL);
114-
MPIDI_OFI_AV_ROOT_ADDR(&MPIDIU_get_av(0, i)) = mapped_table[i];
114+
MPIDI_OFI_AV_ADDR_ROOT(&MPIDIU_get_av(0, i)) = mapped_table[i];
115115
}
116116
MPL_free(mapped_table);
117117
mpi_errno = MPIDU_bc_table_destroy();

src/mpid/ch4/netmod/ofi/ofi_impl.h

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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);

src/mpid/ch4/netmod/ofi/ofi_init.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1437,7 +1437,7 @@ static int try_open_shared_av(struct fid_domain *domain, struct fid_av **p_av)
14371437
/* directly references the mapped fi_addr_t array instead */
14381438
fi_addr_t *mapped_table = (fi_addr_t *) av_attr.map_addr;
14391439
for (int i = 0; i < MPIR_Process.size; i++) {
1440-
MPIDI_OFI_AV_ROOT_ADDR(&MPIDIU_get_av(0, i)) = mapped_table[i];
1440+
MPIDI_OFI_AV_ADDR_ROOT(&MPIDIU_get_av(0, i)) = mapped_table[i];
14411441
MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
14421442
(MPL_DBG_FDEST, " grank mapped to: rank=%d, av=%p, dest=%" PRIu64,
14431443
i, (void *) &MPIDIU_get_av(0, i), mapped_table[i]));

src/mpid/ch4/netmod/ofi/ofi_spawn.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ int MPIDI_OFI_upids_to_lpids(int size, int *remote_upid_size, char *remote_upids
172172
sz = MPIDI_OFI_global.addrnamelen;
173173
MPIDI_av_entry_t *av = &MPIDIU_get_av(k, j);
174174
MPIDI_OFI_VCI_CALL(fi_av_lookup(MPIDI_OFI_global.ctx[ctx_idx].av,
175-
MPIDI_OFI_AV_ROOT_ADDR(av), &tbladdr, &sz), 0,
175+
MPIDI_OFI_AV_ADDR_ROOT(av), &tbladdr, &sz), 0,
176176
avlookup);
177177
if (sz == addrname_len && !memcmp(tbladdr, addrname, addrname_len)) {
178178
remote_lpids[i] = MPIDIU_GPID_CREATE(k, j);
@@ -207,7 +207,7 @@ int MPIDI_OFI_upids_to_lpids(int size, int *remote_upid_size, char *remote_upids
207207
MPIDI_OFI_VCI_CALL(fi_av_insert(MPIDI_OFI_global.ctx[ctx_idx].av, addrname,
208208
1, &addr, 0ULL, NULL), 0, avmap);
209209
MPIR_Assert(addr != FI_ADDR_NOTAVAIL);
210-
MPIDI_OFI_AV_ROOT_ADDR(&MPIDIU_get_av(avtid, i)) = addr;
210+
MPIDI_OFI_AV_ADDR_ROOT(&MPIDIU_get_av(avtid, i)) = addr;
211211

212212
int node_id;
213213
mpi_errno = MPIR_nodeid_lookup(hostname, &node_id);
@@ -261,7 +261,7 @@ int MPIDI_OFI_get_local_upids(MPIR_Comm * comm, int **local_upid_size, char **lo
261261
size_t sz = MPIDI_OFI_global.addrnamelen;;
262262
MPIDI_av_entry_t *av = MPIDIU_comm_rank_to_av(comm, i);
263263
MPIDI_OFI_VCI_CALL(fi_av_lookup(MPIDI_OFI_global.ctx[ctx_idx].av,
264-
MPIDI_OFI_AV_ROOT_ADDR(av),
264+
MPIDI_OFI_AV_ADDR_ROOT(av),
265265
temp_buf + idx, &sz), 0, avlookup);
266266
idx += (int) sz;
267267

src/mpid/ch4/netmod/ofi/ofi_vci.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,8 @@ static int addr_exchange_all_ctx(MPIR_Comm * comm, int *all_num_vcis)
337337
}
338338
}
339339
MPIR_Assert(expect_addr != FI_ADDR_NOTAVAIL);
340-
MPIDI_OFI_AV_ADDR_NO_OFFSET(av, vci, nic) = expect_addr;
340+
/* all_dest[*] */
341+
MPIDI_OFI_AV_ADDR_NONROOT(av, vci, nic) = expect_addr;
341342
/* next */
342343
expect_addr++;
343344
}

0 commit comments

Comments
 (0)