From 6b50ba22a6762231369101ad2d5124c7b84cee00 Mon Sep 17 00:00:00 2001 From: Mike Dubman Date: Mon, 31 Oct 2011 10:17:43 +0000 Subject: [PATCH] select mxm ptl based on user preferences This commit was SVN r25401. --- ompi/mca/mtl/mxm/mtl_mxm.c | 21 +++++++++++++++------ ompi/mca/mtl/mxm/mtl_mxm_component.c | 5 ++--- ompi/mca/mtl/mxm/mtl_mxm_types.h | 3 ++- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/ompi/mca/mtl/mxm/mtl_mxm.c b/ompi/mca/mtl/mxm/mtl_mxm.c index e2ec439c09..8efead7ae0 100644 --- a/ompi/mca/mtl/mxm/mtl_mxm.c +++ b/ompi/mca/mtl/mxm/mtl_mxm.c @@ -103,6 +103,7 @@ int ompi_mtl_mxm_module_init(void) uint64_t mxlr; int rc; ompi_proc_t *mp, **procs; + unsigned ptl_bitmap; size_t totps, proc; int lr, nlps; @@ -163,9 +164,14 @@ int ompi_mtl_mxm_module_init(void) sa_bind_shm.context_id = mxlr; sa_bind_shm.num_procs = nlps; - ep_opt.ptl_bind_addr[MXM_PTL_SELF] = (struct sockaddr*)&sa_bind_self; - ep_opt.ptl_bind_addr[MXM_PTL_RDMA] = (struct sockaddr*)&sa_bind_rdma; - ep_opt.ptl_bind_addr[MXM_PTL_SHM] = (struct sockaddr*)&sa_bind_shm; + ptl_bitmap = ompi_mtl_mxm.mxm_opts.ptl_bitmap; + + ep_opt.ptl_bind_addr[MXM_PTL_SELF] = (ptl_bitmap & MXM_BIT(MXM_PTL_SELF))? + (struct sockaddr*)&sa_bind_self:NULL; + ep_opt.ptl_bind_addr[MXM_PTL_RDMA] =(ptl_bitmap & MXM_BIT(MXM_PTL_RDMA))? + (struct sockaddr*)&sa_bind_rdma:NULL; + ep_opt.ptl_bind_addr[MXM_PTL_SHM] =(ptl_bitmap & MXM_BIT(MXM_PTL_SHM))? + (struct sockaddr*)&sa_bind_shm:NULL; /* Open MXM endpoint */ err = mxm_ep_create(ompi_mtl_mxm.mxm_context, &ep_opt, &ompi_mtl_mxm.ep); @@ -178,13 +184,16 @@ int ompi_mtl_mxm_module_init(void) /* * Get address for each PTL on this endpoint, and share it with other ranks. */ - if (OMPI_SUCCESS != ompi_mtl_mxm_get_ep_address(&ep_info, MXM_PTL_SELF)) { + if ((ptl_bitmap & MXM_BIT(MXM_PTL_SELF)) && + OMPI_SUCCESS != ompi_mtl_mxm_get_ep_address(&ep_info, MXM_PTL_SELF)) { return OMPI_ERROR; } - if (OMPI_SUCCESS != ompi_mtl_mxm_get_ep_address(&ep_info, MXM_PTL_RDMA)) { + if ((ptl_bitmap & MXM_BIT(MXM_PTL_RDMA)) && + OMPI_SUCCESS != ompi_mtl_mxm_get_ep_address(&ep_info, MXM_PTL_RDMA)) { return OMPI_ERROR; } - if (OMPI_SUCCESS != ompi_mtl_mxm_get_ep_address(&ep_info, MXM_PTL_SHM)) { + if ((ptl_bitmap & MXM_BIT(MXM_PTL_SHM)) && + OMPI_SUCCESS != ompi_mtl_mxm_get_ep_address(&ep_info, MXM_PTL_SHM)) { return OMPI_ERROR; } if (OMPI_SUCCESS != ompi_modex_send(&mca_mtl_mxm_component.super.mtl_version, diff --git a/ompi/mca/mtl/mxm/mtl_mxm_component.c b/ompi/mca/mtl/mxm/mtl_mxm_component.c index 39e3a3ac44..f053da4e4f 100644 --- a/ompi/mca/mtl/mxm/mtl_mxm_component.c +++ b/ompi/mca/mtl/mxm/mtl_mxm_component.c @@ -73,14 +73,13 @@ static int ompi_mtl_mxm_component_register(void) static int ompi_mtl_mxm_component_open(void) { - mxm_context_opts_t mxm_opts; mxm_error_t err; mca_mtl_mxm_output = opal_output_open(NULL); opal_output_set_verbosity(mca_mtl_mxm_output, ompi_mtl_mxm.verbose); - mxm_fill_context_opts(&mxm_opts); - err = mxm_init(&mxm_opts, &ompi_mtl_mxm.mxm_context); + mxm_fill_context_opts(&ompi_mtl_mxm.mxm_opts); + err = mxm_init(&ompi_mtl_mxm.mxm_opts, &ompi_mtl_mxm.mxm_context); if (MXM_OK != err) { if (MXM_ERR_NO_DEVICE == err) { MXM_VERBOSE(1, "No supported device found, disqualifying mxm"); diff --git a/ompi/mca/mtl/mxm/mtl_mxm_types.h b/ompi/mca/mtl/mxm/mtl_mxm_types.h index cf1fabae77..efda09ae67 100644 --- a/ompi/mca/mtl/mxm/mtl_mxm_types.h +++ b/ompi/mca/mtl/mxm/mtl_mxm_types.h @@ -26,8 +26,9 @@ BEGIN_C_DECLS */ typedef struct mca_mtl_mxm_module_t { mca_mtl_base_module_t super; /**< base MTL interface */ - int verbose; + int verbose; mxm_h mxm_context; + mxm_context_opts_t mxm_opts; mxm_ep_h ep; } mca_mtl_mxm_module_t;