From 5b7c866f59d9d148166f6a7157772790fab7dbec Mon Sep 17 00:00:00 2001 From: Howard Pritchard Date: Thu, 22 Dec 2016 10:14:34 -0700 Subject: [PATCH] osc/pt2pt: disable when THREAD_MULTIPLE. Per discussion at https://github.com/open-mpi/ompi/issues/2614#issuecomment-392815654, do not allow for selection of the OSC PT2PT when creating an MPI RMA window when THREAD_MULTIPLE is active. Print a helpful message and return a not-supported error. Signed-off-by: Howard Pritchard Signed-off-by: Jeff Squyres (cherry picked from commit d0ffd660841623c02d1dfa3151e7f7afd3327698) Signed-off-by: Jeff Squyres --- ompi/mca/osc/pt2pt/Makefile.am | 2 ++ ompi/mca/osc/pt2pt/help-osc-pt2pt.txt | 15 +++++++++++++++ ompi/mca/osc/pt2pt/osc_pt2pt_component.c | 15 +++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 ompi/mca/osc/pt2pt/help-osc-pt2pt.txt diff --git a/ompi/mca/osc/pt2pt/Makefile.am b/ompi/mca/osc/pt2pt/Makefile.am index 37ba3ab6f26..244f9b7d2c2 100644 --- a/ompi/mca/osc/pt2pt/Makefile.am +++ b/ompi/mca/osc/pt2pt/Makefile.am @@ -19,6 +19,8 @@ # $HEADER$ # +dist_ompidata_DATA = help-osc-pt2pt.txt + pt2pt_sources = \ osc_pt2pt.h \ osc_pt2pt_module.c \ diff --git a/ompi/mca/osc/pt2pt/help-osc-pt2pt.txt b/ompi/mca/osc/pt2pt/help-osc-pt2pt.txt new file mode 100644 index 00000000000..9b57ac20b72 --- /dev/null +++ b/ompi/mca/osc/pt2pt/help-osc-pt2pt.txt @@ -0,0 +1,15 @@ +# -*- text -*- +# +# Copyright (c) 2016 Los Alamos National Security, LLC. All rights +# reserved. +# +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# +[mpi-thread-multiple-not-supported] +The OSC pt2pt component does not support MPI_THREAD_MULTIPLE in this release. +Workarounds are to run on a single node, or to use a system with an RDMA +capable network such as Infiniband. diff --git a/ompi/mca/osc/pt2pt/osc_pt2pt_component.c b/ompi/mca/osc/pt2pt/osc_pt2pt_component.c index c8ac4e73f98..acb08fee54c 100644 --- a/ompi/mca/osc/pt2pt/osc_pt2pt_component.c +++ b/ompi/mca/osc/pt2pt/osc_pt2pt_component.c @@ -25,6 +25,7 @@ */ #include "ompi_config.h" +#include "opal/util/show_help.h" #include @@ -108,6 +109,7 @@ ompi_osc_pt2pt_module_t ompi_osc_pt2pt_module_template = { }; bool ompi_osc_pt2pt_no_locks = false; +static bool using_thread_multiple = false; /* look up parameters for configuring this window. The code first looks in the info structure passed by the user, then through mca @@ -206,6 +208,10 @@ component_init(bool enable_progress_threads, { int ret; + if (enable_mpi_threads) { + using_thread_multiple = true; + } + OBJ_CONSTRUCT(&mca_osc_pt2pt_component.lock, opal_mutex_t); OBJ_CONSTRUCT(&mca_osc_pt2pt_component.pending_operations, opal_list_t); OBJ_CONSTRUCT(&mca_osc_pt2pt_component.pending_operations_lock, opal_mutex_t); @@ -302,6 +308,15 @@ component_select(struct ompi_win_t *win, void **base, size_t size, int disp_unit component */ if (MPI_WIN_FLAVOR_SHARED == flavor) return OMPI_ERR_NOT_SUPPORTED; + /* + * workaround for issue https://github.com/open-mpi/ompi/issues/2614 + * The following check needs to be removed once 2614 is addressed. + */ + if (using_thread_multiple) { + opal_show_help("help-osc-pt2pt.txt", "mpi-thread-multiple-not-supported", true); + return OMPI_ERR_NOT_SUPPORTED; + } + /* create module structure with all fields initialized to zero */ module = (ompi_osc_pt2pt_module_t*) calloc(1, sizeof(ompi_osc_pt2pt_module_t));