Skip to content

Commit 3d4ee33

Browse files
committed
ch4/shm: move vci setup from post_init to set_vcis
Transition from world init to per-comm vci init.
1 parent 14d4ada commit 3d4ee33

File tree

10 files changed

+48
-12
lines changed

10 files changed

+48
-12
lines changed

src/mpid/ch4/shm/posix/eager/include/posix_eager.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
typedef int (*MPIDI_POSIX_eager_init_t) (int rank, int size);
1414
typedef int (*MPIDI_POSIX_eager_post_init_t) (void);
15+
typedef int (*MPIDI_POSIX_eager_set_vcis_t) (MPIR_Comm * comm);
1516
typedef int (*MPIDI_POSIX_eager_finalize_t) (void);
1617

1718
typedef int (*MPIDI_POSIX_eager_send_t) (int grank, MPIDI_POSIX_am_header_t * msg_hdr,
@@ -37,6 +38,7 @@ typedef size_t(*MPIDI_POSIX_eager_buf_limit_t) (void);
3738
typedef struct {
3839
MPIDI_POSIX_eager_init_t init;
3940
MPIDI_POSIX_eager_post_init_t post_init;
41+
MPIDI_POSIX_eager_set_vcis_t set_vcis;
4042
MPIDI_POSIX_eager_finalize_t finalize;
4143

4244
MPIDI_POSIX_eager_send_t send;
@@ -59,6 +61,7 @@ extern char MPIDI_POSIX_eager_strings[][MPIDI_MAX_POSIX_EAGER_STRING_LEN];
5961

6062
int MPIDI_POSIX_eager_init(int rank, int size);
6163
int MPIDI_POSIX_eager_post_init(void);
64+
int MPIDI_POSIX_eager_set_vcis(MPIR_Comm * comm);
6265
int MPIDI_POSIX_eager_finalize(void);
6366

6467
MPL_STATIC_INLINE_PREFIX int MPIDI_POSIX_eager_send(int grank, MPIDI_POSIX_am_header_t * msg_hdr,

src/mpid/ch4/shm/posix/eager/iqueue/func_table.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
MPIDI_POSIX_eager_funcs_t MPIDI_POSIX_eager_iqueue_funcs = {
1616
MPIDI_POSIX_iqueue_init,
1717
MPIDI_POSIX_iqueue_post_init,
18+
MPIDI_POSIX_iqueue_set_vcis,
1819
MPIDI_POSIX_iqueue_finalize,
1920

2021
MPIDI_POSIX_eager_send,

src/mpid/ch4/shm/posix/eager/iqueue/iqueue_init.c

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -130,17 +130,20 @@ int MPIDI_POSIX_iqueue_init(int rank, int size)
130130
int MPIDI_POSIX_iqueue_post_init(void)
131131
{
132132
int mpi_errno = MPI_SUCCESS;
133+
return mpi_errno;
134+
}
133135

134-
/* gather max_vcis */
135-
int max_vcis = MPIDI_POSIX_global.num_vcis;
136+
int MPIDI_POSIX_iqueue_set_vcis(MPIR_Comm * comm)
137+
{
138+
int mpi_errno = MPI_SUCCESS;
139+
MPIR_FUNC_ENTER;
136140

137-
MPIR_Comm *comm = MPIR_Process.comm_world->node_comm;
138-
/* NOTE: node_comm is NULL if there no other intra-node processes */
139-
if (comm) {
140-
mpi_errno = MPIR_Allreduce_impl(MPI_IN_PLACE, &max_vcis, 1, MPIR_INT_INTERNAL, MPI_MAX,
141-
comm, MPIR_ERR_NONE);
142-
MPIR_ERR_CHECK(mpi_errno);
143-
}
141+
MPIR_Assert(comm == MPIR_Process.comm_world); /* TODO: relax this */
142+
MPIR_Assert(MPIDI_POSIX_eager_iqueue_global.all_slab == NULL);
143+
144+
int max_vcis = MPIDI_POSIX_global.num_vcis;
145+
MPIDI_POSIX_eager_iqueue_global.max_vcis = max_vcis;
146+
MPIDU_Init_shm_barrier();
144147

145148
MPIDI_POSIX_eager_iqueue_global.max_vcis = max_vcis;
146149
int slab_size = MPIDI_POSIX_eager_iqueue_global.slab_size * max_vcis * max_vcis;

src/mpid/ch4/shm/posix/eager/iqueue/iqueue_noinline.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@
1111

1212
int MPIDI_POSIX_iqueue_init(int rank, int size);
1313
int MPIDI_POSIX_iqueue_post_init(void);
14+
int MPIDI_POSIX_iqueue_set_vcis(MPIR_Comm * comm);
1415
int MPIDI_POSIX_iqueue_finalize(void);
1516

1617
#ifdef POSIX_EAGER_INLINE
1718
#define MPIDI_POSIX_eager_init MPIDI_POSIX_iqueue_init
1819
#define MPIDI_POSIX_eager_post_init MPIDI_POSIX_iqueue_post_init
20+
#define MPIDI_POSIX_eager_set_vcis MPIDI_POSIX_iqueue_set_vcis
1921
#define MPIDI_POSIX_eager_finalize MPIDI_POSIX_iqueue_finalize
2022
#endif
2123

src/mpid/ch4/shm/posix/eager/src/posix_eager_impl.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ int MPIDI_POSIX_eager_post_init(void)
1919
return MPIDI_POSIX_eager_func->post_init();
2020
}
2121

22+
int MPIDI_POSIX_eager_set_vcis(MPIR_Comm * comm)
23+
{
24+
return MPIDI_POSIX_eager_func->set_vcis(comm);
25+
}
26+
2227
int MPIDI_POSIX_eager_finalize(void)
2328
{
2429
return MPIDI_POSIX_eager_func->finalize();

src/mpid/ch4/shm/posix/eager/stub/stub_init.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ int MPIDI_POSIX_stub_post_init(void)
2020
return MPI_SUCCESS;
2121
}
2222

23+
int MPIDI_POSIX_stub_set_vcis(MPIR_Comm * comm)
24+
{
25+
MPIR_Assert(0);
26+
return MPI_SUCCESS;
27+
}
28+
2329
int MPIDI_POSIX_stub_finalize()
2430
{
2531
MPIR_Assert(0);

src/mpid/ch4/shm/posix/eager/stub/stub_noinline.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010

1111
int MPIDI_POSIX_stub_init(int rank, int size);
1212
int MPIDI_POSIX_stub_post_init(void);
13+
int MPIDI_POSIX_stub_set_vcis(MPIR_Comm * comm);
1314
int MPIDI_POSIX_stub_finalize(void);
1415

1516
#ifdef POSIX_EAGER_INLINE
1617
#define MPIDI_POSIX_eager_init MPIDI_POSIX_stub_init
1718
#define MPIDI_POSIX_eager_post_init MPIDI_POSIX_stub_post_init
19+
#define MPIDI_POSIX_eager_set_vcis MPIDI_POSIX_stub_set_vcis
1820
#define MPIDI_POSIX_eager_finalize MPIDI_POSIX_stub_finalize
1921
#endif
2022

src/mpid/ch4/shm/posix/posix_impl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
} \
2929
} while (0)
3030

31+
int MPIDI_POSIX_init_vci(int vci);
3132
void MPIDI_POSIX_delay_shm_mutex_destroy(int rank, MPL_proc_mutex_t * shm_mutex_ptr);
3233

3334
#endif /* POSIX_IMPL_H_INCLUDED */

src/mpid/ch4/shm/posix/posix_types.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ typedef struct {
5151
int *local_ranks;
5252
int *local_procs;
5353
int local_rank_0;
54-
int num_vcis;
54+
int num_vcis; /* num_vcis in POSIX need >= MPIDI_global.n_total_vcis */
5555
int *local_rank_dist;
5656
MPIDI_POSIX_topo_info_t topo;
5757
} MPIDI_POSIX_global_t;

src/mpid/ch4/shm/posix/posix_vci.c

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,27 @@ int MPIDI_POSIX_comm_set_vcis(MPIR_Comm * comm, int num_vcis)
1010
{
1111
int mpi_errno = MPI_SUCCESS;
1212

13-
MPIDI_POSIX_global.num_vcis = num_vcis;
13+
/* We only set up vcis once */
14+
MPIR_Assert(MPIDI_POSIX_global.num_vcis == 1);
15+
16+
MPIR_Comm *node_comm = comm->node_comm;
17+
if (node_comm == NULL) {
18+
/* nothing to do if there is no local domain */
19+
goto fn_exit;
20+
}
21+
22+
int max_vcis;
23+
mpi_errno = MPIR_Allreduce_impl(&num_vcis, &max_vcis, 1, MPI_INT, MPI_MAX, node_comm,
24+
MPIR_ERR_NONE);
25+
26+
MPIDI_POSIX_global.num_vcis = max_vcis;
1427

1528
for (int i = 1; i < MPIDI_POSIX_global.num_vcis; i++) {
1629
mpi_errno = MPIDI_POSIX_init_vci(i);
1730
MPIR_ERR_CHECK(mpi_errno);
1831
}
1932

20-
mpi_errno = MPIDI_POSIX_eager_post_init();
33+
mpi_errno = MPIDI_POSIX_eager_set_vcis(comm);
2134
MPIR_ERR_CHECK(mpi_errno);
2235

2336
fn_exit:

0 commit comments

Comments
 (0)