diff --git a/oshmem/mca/spml/ikrit/spml_ikrit.c b/oshmem/mca/spml/ikrit/spml_ikrit.c index 56d796dcf7..994eda17aa 100644 --- a/oshmem/mca/spml/ikrit/spml_ikrit.c +++ b/oshmem/mca/spml/ikrit/spml_ikrit.c @@ -342,6 +342,12 @@ int mca_spml_ikrit_del_procs(oshmem_proc_t** procs, size_t nprocs) size_t i; opal_list_item_t *item; +#if MXM_API >= MXM_VERSION(2,0) + if (mca_spml_ikrit.bulk_disconnect) { + mxm_ep_powerdown(mca_spml_ikrit.mxm_ep); + } +#endif + while (NULL != (item = opal_list_remove_first(&mca_spml_ikrit.active_peers))) { }; OBJ_DESTRUCT(&mca_spml_ikrit.active_peers); @@ -487,6 +493,14 @@ int mca_spml_ikrit_add_procs(oshmem_proc_t** procs, size_t nprocs) free(conn_reqs); #endif +#if MXM_API >= MXM_VERSION(2,0) + if (mca_spml_ikrit.bulk_connect) { + /* Need a barrier to ensure remote peers already created connection */ + oshmem_shmem_barrier(); + mxm_ep_wireup(mca_spml_ikrit.mxm_ep); + } +#endif + proc_self = oshmem_proc_group_find(oshmem_group_all, my_rank); /* identify local processes and change transport to SHM */ for (i = 0; i < nprocs; i++) { diff --git a/oshmem/mca/spml/ikrit/spml_ikrit.h b/oshmem/mca/spml/ikrit/spml_ikrit.h index e90fa18644..4703859688 100644 --- a/oshmem/mca/spml/ikrit/spml_ikrit.h +++ b/oshmem/mca/spml/ikrit/spml_ikrit.h @@ -81,6 +81,8 @@ struct mca_spml_ikrit_t { int free_list_num; /* initial size of free list */ int free_list_max; /* maximum size of free list */ int free_list_inc; /* number of elements to grow free list */ + int bulk_connect; /* use bulk connect */ + int bulk_disconnect; /* use bulk disconnect */ bool enabled; opal_list_t active_peers; diff --git a/oshmem/mca/spml/ikrit/spml_ikrit_component.c b/oshmem/mca/spml/ikrit/spml_ikrit_component.c index cd81358027..4e2d8d39ae 100644 --- a/oshmem/mca/spml/ikrit/spml_ikrit_component.c +++ b/oshmem/mca/spml/ikrit/spml_ikrit_component.c @@ -150,6 +150,10 @@ static int mca_spml_ikrit_component_register(void) mca_spml_ikrit_param_register_int("free_list_max", 1024, 0); mca_spml_ikrit.free_list_inc = mca_spml_ikrit_param_register_int("free_list_inc", 16, 0); + mca_spml_ikrit.bulk_connect = + mca_spml_ikrit_param_register_int("bulk_connect", 1, 0); + mca_spml_ikrit.bulk_disconnect = + mca_spml_ikrit_param_register_int("bulk_disconnect", 1, 0); mca_spml_ikrit.priority = mca_spml_ikrit_param_register_int("priority", 20,