1
1

ompi: always enable MPI_THREAD_MULTIPLE support

This commit removes the --with-mpi-thread-multiple option and forces
MPI_THREAD_MULTIPLE support. This cleans up an abstration violation
in opal where OMPI_ENABLE_THREAD_MULTIPLE determines whether the
opal_using_threads is meaningful. To reduce the performance hit on
MPI_THREAD_SINGLE programs an OPAL_UNLIKELY is used for the
check on opal_using_threads in OPAL_THREAD_* macros.

This commit does not clean up the arguments to the various functions
that take whether muti-threading support is enabled. That should be
done at a later time.

Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
Этот коммит содержится в:
Nathan Hjelm 2016-02-23 09:58:32 -07:00
родитель d6fb56af29
Коммит 230d04327e
18 изменённых файлов: 67 добавлений и 203 удалений

Просмотреть файл

@ -1,58 +0,0 @@
dnl
dnl Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
dnl University Research and Technology
dnl Corporation. All rights reserved.
dnl Copyright (c) 2004-2005 The University of Tennessee and The University
dnl of Tennessee Research Foundation. All rights
dnl reserved.
dnl Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
dnl University of Stuttgart. All rights reserved.
dnl Copyright (c) 2004-2005 The Regents of the University of California.
dnl All rights reserved.
dnl Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
dnl $COPYRIGHT$
dnl
dnl Additional copyrights may follow
dnl
dnl $HEADER$
dnl
AC_DEFUN([OMPI_CONFIG_THREADS],[
#
# Arguments: none
#
# Dependencies: None
#
# Modifies:
# none - see called tests
#
# configure threads
#
#
# MPI_THREAD_MULTIPLE
#
# --enable-mpi-thread-multiple
# #if OMPI_ENABLE_THREAD_MULTIPLE == 0 /* Not available */
# #if OMPI_ENABLE_THREAD_MULTIPLE == 1 /* Available */
#
AC_MSG_CHECKING([if want MPI_THREAD_MULTIPLE support])
AC_ARG_ENABLE([mpi_thread_multiple],
[AC_HELP_STRING([--enable-mpi-thread-multiple],
[Enable MPI_THREAD_MULTIPLE support (default: disabled)])])
if test "$enable_mpi_thread_multiple" = "yes" ; then
ompi_want_mpi_threads=1
OMPI_ENABLE_THREAD_MULTIPLE=1
AC_MSG_RESULT([Enabled])
else
# Default: disable
ompi_want_mpi_threads=0
OMPI_ENABLE_THREAD_MULTIPLE=0
AC_MSG_RESULT([Disabled])
fi
AC_DEFINE_UNQUOTED([OMPI_ENABLE_THREAD_MULTIPLE], [$ompi_want_mpi_threads],
[Enable MPI_THREAD_MULTIPLE])
])dnl

Просмотреть файл

@ -896,7 +896,6 @@ OPAL_CHECK_BROKEN_QSORT
# Check out what thread support we have
#
OPAL_CONFIG_THREADS
OMPI_CONFIG_THREADS
CFLAGS="$CFLAGS $THREAD_CFLAGS"
CPPFLAGS="$CPPFLAGS $THREAD_CPPFLAGS"

Просмотреть файл

@ -514,7 +514,6 @@ static int ompi_comm_register_cid (uint32_t cid)
if ( regcom->cid > cid ) {
break;
}
#if OMPI_ENABLE_THREAD_MULTIPLE
if( regcom->cid == cid ) {
/**
* The MPI standard state that is the user responsability to
@ -527,7 +526,6 @@ static int ompi_comm_register_cid (uint32_t cid)
ok = false;
break;
}
#endif /* OMPI_ENABLE_THREAD_MULTIPLE */
}
if (ok) {
opal_list_insert_pos (&ompi_registered_comms, (opal_list_item_t *) regcom,

Просмотреть файл

@ -170,8 +170,7 @@ int mca_bml_r2_ft_event(int state)
* This will cause the BTL components to discover the available
* network options on this machine, and post proper modex informaiton.
*/
if( OMPI_SUCCESS != (ret = mca_btl_base_select(OPAL_ENABLE_PROGRESS_THREADS,
OMPI_ENABLE_THREAD_MULTIPLE) ) ) {
if( OMPI_SUCCESS != (ret = mca_btl_base_select(OPAL_ENABLE_PROGRESS_THREADS, 1) ) ) {
opal_output(0, "bml:r2: ft_event(Restart): Failed to select in BTL framework\n");
return ret;
}
@ -257,8 +256,7 @@ int mca_bml_r2_ft_event(int state)
* This will cause the BTL components to discover the available
* network options on this machine, and post proper modex informaiton.
*/
if( OMPI_SUCCESS != (ret = mca_btl_base_select(OPAL_ENABLE_PROGRESS_THREADS,
OMPI_ENABLE_THREAD_MULTIPLE) ) ) {
if( OMPI_SUCCESS != (ret = mca_btl_base_select(OPAL_ENABLE_PROGRESS_THREADS, 1) ) ) {
opal_output(0, "bml:r2: ft_event(Restart): Failed to select in BTL framework\n");
return ret;
}

Просмотреть файл

@ -215,23 +215,19 @@ int mca_io_base_file_select(ompi_file_t *file,
}
if (OMPI_SUCCESS !=
(ret = mca_fs_base_find_available(OPAL_ENABLE_PROGRESS_THREADS,
OMPI_ENABLE_THREAD_MULTIPLE))) {
(ret = mca_fs_base_find_available(OPAL_ENABLE_PROGRESS_THREADS, 1))) {
return err;
}
if (OMPI_SUCCESS !=
(ret = mca_fcoll_base_find_available(OPAL_ENABLE_PROGRESS_THREADS,
OMPI_ENABLE_THREAD_MULTIPLE))) {
(ret = mca_fcoll_base_find_available(OPAL_ENABLE_PROGRESS_THREADS, 1))) {
return err;
}
if (OMPI_SUCCESS !=
(ret = mca_fbtl_base_find_available(OPAL_ENABLE_PROGRESS_THREADS,
OMPI_ENABLE_THREAD_MULTIPLE))) {
(ret = mca_fbtl_base_find_available(OPAL_ENABLE_PROGRESS_THREADS, 1))) {
return err;
}
if (OMPI_SUCCESS !=
(ret = mca_sharedfp_base_find_available(OPAL_ENABLE_PROGRESS_THREADS,
OMPI_ENABLE_THREAD_MULTIPLE))) {
(ret = mca_sharedfp_base_find_available(OPAL_ENABLE_PROGRESS_THREADS, 1))) {
return err;
}
}

Просмотреть файл

@ -38,7 +38,7 @@ static int mca_io_base_open(mca_base_open_flag_t flags)
return ret;
}
return mca_io_base_find_available(OPAL_ENABLE_PROGRESS_THREADS, OMPI_ENABLE_THREAD_MULTIPLE);
return mca_io_base_find_available(OPAL_ENABLE_PROGRESS_THREADS, 1);
}
MCA_BASE_FRAMEWORK_DECLARE(ompi, io, "I/O", NULL, mca_io_base_open, NULL,

Просмотреть файл

@ -43,7 +43,6 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
switch (ev->type) {
case PTL_EVENT_AUTO_FREE:
#if OMPI_ENABLE_THREAD_MULTIPLE
OPAL_THREAD_LOCK(&ompi_mtl_portals4.short_block_mutex);
switch (block->status) {
case BLOCK_STATUS_ACTIVATED: /* May be encountered with multi threading */
@ -73,19 +72,10 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
__FILE__, __LINE__, block->status);
break;
}
#else
if (OPAL_UNLIKELY(block->release_on_free)) {
opal_list_remove_item(&ompi_mtl_portals4.recv_short_blocks,
&block->base);
ompi_mtl_portals4_recv_short_block_free(block);
} else {
ompi_mtl_portals4_activate_block(block);
}
#endif
break;
case PTL_EVENT_AUTO_UNLINK:
#if OMPI_ENABLE_THREAD_MULTIPLE
OPAL_THREAD_LOCK(&ompi_mtl_portals4.short_block_mutex);
switch (block->status) {
case BLOCK_STATUS_ACTIVATED: /* Normal case */
@ -115,14 +105,10 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
__FILE__, __LINE__, block->status);
break;
}
#else
block->status = BLOCK_STATUS_WAITING_FREE;
ompi_mtl_portals4.active_recv_short_blocks--;
#endif
break;
case PTL_EVENT_LINK:
#if OMPI_ENABLE_THREAD_MULTIPLE
OPAL_THREAD_LOCK(&ompi_mtl_portals4.short_block_mutex);
switch (block->status) {
case BLOCK_STATUS_WAITING_LINK:
@ -138,10 +124,7 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
__FILE__, __LINE__, block->status);
break;
}
#else
block->status = BLOCK_STATUS_ACTIVATED;
ompi_mtl_portals4.active_recv_short_blocks++;
#endif
break;
default:

Просмотреть файл

@ -10,7 +10,7 @@
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2007-2015 Los Alamos National Security, LLC. All rights
* Copyright (c) 2007-2016 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2010-2012 Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011 Sandia National Laboratories. All rights reserved.
@ -101,16 +101,16 @@ int mca_pml_ob1_recv(void *addr,
mca_pml_ob1_recv_request_t *recvreq = NULL;
int rc;
#if !OMPI_ENABLE_THREAD_MULTIPLE
recvreq = mca_pml_ob1_recvreq;
mca_pml_ob1_recvreq = NULL;
if( OPAL_UNLIKELY(NULL == recvreq) )
#endif /* !OMPI_ENABLE_THREAD_MULTIPLE */
{
MCA_PML_OB1_RECV_REQUEST_ALLOC(recvreq);
if (NULL == recvreq)
return OMPI_ERR_TEMP_OUT_OF_RESOURCE;
}
if (OPAL_LIKELY(!ompi_mpi_thread_multiple)) {
recvreq = mca_pml_ob1_recvreq;
mca_pml_ob1_recvreq = NULL;
}
if( OPAL_UNLIKELY(NULL == recvreq) ) {
MCA_PML_OB1_RECV_REQUEST_ALLOC(recvreq);
if (NULL == recvreq)
return OMPI_ERR_TEMP_OUT_OF_RESOURCE;
}
MCA_PML_OB1_RECV_REQUEST_INIT(recvreq, addr, count, datatype,
src, tag, comm, false);
@ -128,16 +128,12 @@ int mca_pml_ob1_recv(void *addr,
rc = recvreq->req_recv.req_base.req_ompi.req_status.MPI_ERROR;
#if OMPI_ENABLE_THREAD_MULTIPLE
MCA_PML_OB1_RECV_REQUEST_RETURN(recvreq);
#else
if( NULL != mca_pml_ob1_recvreq ) {
if (OPAL_UNLIKELY(ompi_mpi_thread_multiple || NULL != mca_pml_ob1_recvreq)) {
MCA_PML_OB1_RECV_REQUEST_RETURN(recvreq);
} else {
mca_pml_ob1_recv_request_fini (recvreq);
mca_pml_ob1_recvreq = recvreq;
}
#endif
return rc;
}

Просмотреть файл

@ -10,7 +10,7 @@
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2007-2015 Los Alamos National Security, LLC. All rights
* Copyright (c) 2007-2016 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2014 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2015 Research Organization for Information Science
@ -222,16 +222,17 @@ int mca_pml_ob1_send(const void *buf,
}
}
#if !OMPI_ENABLE_THREAD_MULTIPLE
sendreq = mca_pml_ob1_sendreq;
mca_pml_ob1_sendreq = NULL;
if( OPAL_UNLIKELY(NULL == sendreq) )
#endif /* !OMPI_ENABLE_THREAD_MULTIPLE */
{
MCA_PML_OB1_SEND_REQUEST_ALLOC(comm, dst, sendreq);
if (NULL == sendreq)
return OMPI_ERR_TEMP_OUT_OF_RESOURCE;
}
if (OPAL_LIKELY(!ompi_mpi_thread_multiple)) {
sendreq = mca_pml_ob1_sendreq;
mca_pml_ob1_sendreq = NULL;
}
if( OPAL_UNLIKELY(NULL == sendreq) ) {
MCA_PML_OB1_SEND_REQUEST_ALLOC(comm, dst, sendreq);
if (NULL == sendreq)
return OMPI_ERR_TEMP_OUT_OF_RESOURCE;
}
sendreq->req_send.req_base.req_proc = dst_proc;
sendreq->rdma_frag = NULL;
@ -253,16 +254,12 @@ int mca_pml_ob1_send(const void *buf,
rc = sendreq->req_send.req_base.req_ompi.req_status.MPI_ERROR;
}
#if OMPI_ENABLE_THREAD_MULTIPLE
MCA_PML_OB1_SEND_REQUEST_RETURN(sendreq);
#else
if( NULL != mca_pml_ob1_sendreq ) {
if (OPAL_UNLIKELY(ompi_mpi_thread_multiple || NULL != mca_pml_ob1_sendreq)) {
MCA_PML_OB1_SEND_REQUEST_RETURN(sendreq);
} else {
mca_pml_ob1_send_request_fini (sendreq);
mca_pml_ob1_sendreq = sendreq;
}
#endif
return rc;
}

Просмотреть файл

@ -56,7 +56,7 @@ mca_pml_base_component_2_0_0_t mca_pml_v_component =
};
static bool pml_v_enable_progress_treads = OPAL_ENABLE_PROGRESS_THREADS;
static bool pml_v_enable_mpi_thread_multiple = OMPI_ENABLE_THREAD_MULTIPLE;
static bool pml_v_enable_mpi_thread_multiple = 1;
static char *ompi_pml_vprotocol_include_list;
static char *ompi_pml_v_output;

Просмотреть файл

@ -49,8 +49,7 @@ int mca_topo_base_lazy_init(void)
}
if (OMPI_SUCCESS !=
(err = mca_topo_base_find_available(OPAL_ENABLE_PROGRESS_THREADS,
OMPI_ENABLE_THREAD_MULTIPLE))) {
(err = mca_topo_base_find_available(OPAL_ENABLE_PROGRESS_THREADS, 1))) {
return err;
}
}

Просмотреть файл

@ -1,3 +1,4 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
/*
* Copyright (c) 2004-2007 The Trustees of Indiana University and Indiana
* University Research and Technology
@ -13,6 +14,8 @@
* Copyright (c) 2015 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2016 Los Alamos National Security, LLC. All rights
* reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -50,16 +53,7 @@ int MPI_Init_thread(int *argc, char ***argv, int required,
}
}
/*
* A thread compliant MPI implementation will be able to return provided
* = MPI_THREAD_MULTIPLE. Such an implementation may always return provided
* = MPI_THREAD_MULTIPLE, irrespective of the value of required.
*/
#if OMPI_ENABLE_THREAD_MULTIPLE
*provided = MPI_THREAD_MULTIPLE;
#else
*provided = MPI_THREAD_SINGLE;
#endif
*provided = required;
/* Call the back-end initialization function (we need to put as
little in this function as possible so that if it's profiled, we

Просмотреть файл

@ -325,15 +325,7 @@ void ompi_mpi_thread_level(int requested, int *provided)
*/
ompi_mpi_thread_requested = requested;
if (OMPI_ENABLE_THREAD_MULTIPLE == 1) {
ompi_mpi_thread_provided = *provided = requested;
} else {
if (MPI_THREAD_MULTIPLE == requested) {
ompi_mpi_thread_provided = *provided = MPI_THREAD_SERIALIZED;
} else {
ompi_mpi_thread_provided = *provided = requested;
}
}
ompi_mpi_thread_provided = *provided = requested;
if (!ompi_mpi_main_thread) {
ompi_mpi_main_thread = opal_thread_get_self();
@ -530,7 +522,6 @@ int ompi_mpi_init(int argc, char **argv, int requested, int *provided)
memset ( &threadlevel_bf, 0, sizeof(uint8_t));
OMPI_THREADLEVEL_SET_BITFLAG ( ompi_mpi_thread_provided, threadlevel_bf );
#if OMPI_ENABLE_THREAD_MULTIPLE
/* add this bitflag to the modex */
OPAL_MODEX_SEND_STRING(ret, OPAL_PMIX_GLOBAL,
"MPI_THREAD_LEVEL", &threadlevel_bf, sizeof(uint8_t));
@ -538,7 +529,6 @@ int ompi_mpi_init(int argc, char **argv, int requested, int *provided)
error = "ompi_mpi_init: modex send thread level";
goto error;
}
#endif
/* If thread support was enabled, then setup OPAL to allow for
them. */

Просмотреть файл

@ -298,17 +298,11 @@ void ompi_info_do_config(bool want_all)
}
#if OMPI_RTE_ORTE
(void)asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: %s, OPAL support: %s, OMPI progress: %s, ORTE progress: yes, Event lib: yes)",
"posix",
OMPI_ENABLE_THREAD_MULTIPLE ? "yes" : "no",
OPAL_ENABLE_MULTI_THREADS ? "yes" : "no",
OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
(void)asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: yes, OPAL support: yes, OMPI progress: %s, ORTE progress: yes, Event lib: yes)",
"posix", OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
#else
(void)asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: %s, OPAL support: %s, OMPI progress: %s, Event lib: yes)",
"posix",
OMPI_ENABLE_THREAD_MULTIPLE ? "yes" : "no",
OPAL_ENABLE_MULTI_THREADS ? "yes" : "no",
OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
(void)asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: yes, OPAL support: yes, OMPI progress: %s, Event lib: yes)",
"posix", OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
#endif
(void)asprintf(&ft_support, "%s (checkpoint thread: %s)",

Просмотреть файл

@ -1,3 +1,4 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
/*
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
* University Research and Technology
@ -9,7 +10,7 @@
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2007-2013 Los Alamos National Security, LLC. All rights
* Copyright (c) 2007-2016 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2015 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
@ -28,9 +29,7 @@
* Wait and see if some upper layer wants to use threads, if support
* exists.
*/
#if OMPI_ENABLE_THREAD_MULTIPLE
bool opal_uses_threads = false;
#endif
static void opal_mutex_construct(opal_mutex_t *m)
{

Просмотреть файл

@ -11,7 +11,7 @@
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2007 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2007-2015 Los Alamos National Security, LLC. All rights
* Copyright (c) 2007-2016 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2007 Voltaire. All rights reserved.
* Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
@ -29,6 +29,7 @@
#include "opal_config.h"
#include "opal/sys/atomic.h"
#include "opal/prefetch.h"
BEGIN_C_DECLS
@ -40,12 +41,10 @@ BEGIN_C_DECLS
* Functions for locking of critical sections.
*/
#if OMPI_ENABLE_THREAD_MULTIPLE
/*
* declaring this here so that CL does not complain
*/
OPAL_DECLSPEC extern bool opal_uses_threads;
#endif
/**
* Opaque mutex object
@ -144,11 +143,7 @@ BEGIN_C_DECLS
* possibility that we may have multiple threads, true will be
* returned.
*/
#if OMPI_ENABLE_THREAD_MULTIPLE
#define opal_using_threads() opal_uses_threads
#else
#define opal_using_threads() 0
#endif
/**
* Set whether the process is using multiple threads or not.
@ -168,9 +163,7 @@ BEGIN_C_DECLS
*/
static inline bool opal_set_using_threads(bool have)
{
#if OMPI_ENABLE_THREAD_MULTIPLE
opal_uses_threads = have;
#endif
return opal_using_threads();
}
@ -190,7 +183,7 @@ static inline bool opal_set_using_threads(bool have)
*/
#define OPAL_THREAD_LOCK(mutex) \
do { \
if (opal_using_threads()) { \
if (OPAL_UNLIKELY(opal_using_threads())) { \
opal_mutex_lock(mutex); \
} \
} while (0)
@ -212,7 +205,7 @@ static inline bool opal_set_using_threads(bool have)
* Returns 0 if mutex was locked, non-zero otherwise.
*/
#define OPAL_THREAD_TRYLOCK(mutex) \
(opal_using_threads() ? opal_mutex_trylock(mutex) : 0)
(OPAL_UNLIKELY(opal_using_threads()) ? opal_mutex_trylock(mutex) : 0)
/**
* Unlock a mutex if opal_using_threads() says that multiple threads
@ -229,7 +222,7 @@ static inline bool opal_set_using_threads(bool have)
*/
#define OPAL_THREAD_UNLOCK(mutex) \
do { \
if (opal_using_threads()) { \
if (OPAL_UNLIKELY(opal_using_threads())) { \
opal_mutex_unlock(mutex); \
} \
} while (0)
@ -252,7 +245,7 @@ static inline bool opal_set_using_threads(bool have)
*/
#define OPAL_THREAD_SCOPED_LOCK(mutex, action) \
do { \
if(opal_using_threads()) { \
if(OPAL_UNLIKELY(opal_using_threads())) { \
opal_mutex_lock(mutex); \
action; \
opal_mutex_unlock(mutex); \
@ -271,7 +264,7 @@ OPAL_THREAD_ADD32(volatile int32_t *addr, int delta)
{
int32_t ret;
if (opal_using_threads()) {
if (OPAL_UNLIKELY(opal_using_threads())) {
ret = opal_atomic_add_32(addr, delta);
} else {
ret = (*addr += delta);
@ -286,7 +279,7 @@ OPAL_THREAD_ADD64(volatile int64_t *addr, int delta)
{
int64_t ret;
if (opal_using_threads()) {
if (OPAL_UNLIKELY(opal_using_threads())) {
ret = opal_atomic_add_64(addr, delta);
} else {
ret = (*addr += delta);
@ -301,7 +294,7 @@ OPAL_THREAD_ADD_SIZE_T(volatile size_t *addr, int delta)
{
size_t ret;
if (opal_using_threads()) {
if (OPAL_UNLIKELY(opal_using_threads())) {
ret = opal_atomic_add_size_t(addr, delta);
} else {
ret = (*addr += delta);
@ -315,15 +308,15 @@ OPAL_THREAD_ADD_SIZE_T(volatile size_t *addr, int delta)
#if OPAL_HAVE_ATOMIC_CMPSET_32
#define OPAL_ATOMIC_CMPSET_32(x, y, z) \
(opal_using_threads() ? opal_atomic_cmpset_32(x, y, z) : OPAL_CMPSET(x, y, z))
(OPAL_UNLIKELY(opal_using_threads()) ? opal_atomic_cmpset_32(x, y, z) : OPAL_CMPSET(x, y, z))
#endif
#if OPAL_HAVE_ATOMIC_CMPSET_64
#define OPAL_ATOMIC_CMPSET_64(x, y, z) \
(opal_using_threads() ? opal_atomic_cmpset_64(x, y, z) : OPAL_CMPSET(x, y, z))
(OPAL_UNLIKELY(opal_using_threads()) ? opal_atomic_cmpset_64(x, y, z) : OPAL_CMPSET(x, y, z))
#endif
#if OPAL_HAVE_ATOMIC_CMPSET_32 || OPAL_HAVE_ATOMIC_CMPSET_64
#define OPAL_ATOMIC_CMPSET(x, y, z) \
(opal_using_threads() ? opal_atomic_cmpset(x, y, z) : OPAL_CMPSET(x, y, z))
(OPAL_UNLIKELY(opal_using_threads()) ? opal_atomic_cmpset(x, y, z) : OPAL_CMPSET(x, y, z))
#endif
END_C_DECLS

Просмотреть файл

@ -279,17 +279,12 @@ static int _shmem_init(int argc, char **argv, int requested, int *provided)
goto error;
}
if (OSHMEM_SUCCESS
!= (ret = mca_spml_base_select(OPAL_ENABLE_PROGRESS_THREADS,
OMPI_ENABLE_THREAD_MULTIPLE))) {
if (OSHMEM_SUCCESS != (ret = mca_spml_base_select(OPAL_ENABLE_PROGRESS_THREADS, 1))) {
error = "mca_spml_base_select() failed";
goto error;
}
if (OSHMEM_SUCCESS
!= (ret =
mca_scoll_base_find_available(OPAL_ENABLE_PROGRESS_THREADS,
OMPI_ENABLE_THREAD_MULTIPLE))) {
if (OSHMEM_SUCCESS != (ret = mca_scoll_base_find_available(OPAL_ENABLE_PROGRESS_THREADS, 1))) {
error = "mca_scoll_base_find_available() failed";
goto error;
}
@ -345,10 +340,7 @@ static int _shmem_init(int argc, char **argv, int requested, int *provided)
goto error;
}
if (OSHMEM_SUCCESS
!= (ret =
mca_atomic_base_find_available(OPAL_ENABLE_PROGRESS_THREADS,
OMPI_ENABLE_THREAD_MULTIPLE))) {
if (OSHMEM_SUCCESS != (ret = mca_atomic_base_find_available(OPAL_ENABLE_PROGRESS_THREADS, 1))) {
error = "mca_atomic_base_find_available() failed";
goto error;
}

Просмотреть файл

@ -266,17 +266,11 @@ void oshmem_info_do_config(bool want_all)
}
#if OMPI_RTE_ORTE
(void)asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: %s, OPAL support: %s, OMPI progress: %s, ORTE progress: yes, Event lib: yes)",
"posix",
OMPI_ENABLE_THREAD_MULTIPLE ? "yes" : "no",
OPAL_ENABLE_MULTI_THREADS ? "yes" : "no",
OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
(void)asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: yes, OPAL support: yes, OMPI progress: %s, ORTE progress: yes, Event lib: yes)",
"posix", OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
#else
(void)asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: %s, OPAL support: %s, OMPI progress: %s, Event lib: yes)",
"posix",
OMPI_ENABLE_THREAD_MULTIPLE ? "yes" : "no",
OPAL_ENABLE_MULTI_THREADS ? "yes" : "no",
OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
(void)asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: yes, OPAL support: yes, OMPI progress: %s, Event lib: yes)",
"posix", OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
#endif
(void)asprintf(&ft_support, "%s (checkpoint thread: %s)",