Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add missing MPI_Status conversion subroutines #7762

Merged
merged 4 commits into from
Sep 10, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions config/ompi_config_files.m4
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# -*- shell-script -*-
#
# Copyright (c) 2009-2020 Cisco Systems, Inc. All rights reserved
# Copyright (c) 2017-2018 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# Copyright (c) 2017-2020 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# Copyright (c) 2018 Los Alamos National Security, LLC. All rights
# reserved.
# Copyright (c) 2018 FUJITSU LIMITED. All rights reserved.
Expand All @@ -29,6 +29,8 @@ AC_DEFUN([OMPI_CONFIG_FILES],[
ompi/mpi/fortran/base/Makefile
ompi/mpi/fortran/mpif-h/Makefile
ompi/mpi/fortran/mpif-h/profile/Makefile
ompi/mpi/fortran/use-mpi/Makefile
ompi/mpi/fortran/use-mpi/mpi-types.F90
ompi/mpi/fortran/use-mpi-tkr/Makefile
ompi/mpi/fortran/use-mpi-tkr/fortran_sizes.h
ompi/mpi/fortran/use-mpi-tkr/fortran_kinds.sh
Expand Down
3 changes: 3 additions & 0 deletions config/ompi_fortran_check_bind_c.m4
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ 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-2014 Cisco Systems, Inc. All rights reserved.
dnl Copyright (c) 2020 Research Organization for Information Science
dnl and Technology (RIST). All rights reserved.
dnl $COPYRIGHT$
dnl
dnl Additional copyrights may follow
Expand Down Expand Up @@ -83,6 +85,7 @@ AC_DEFUN([OMPI_FORTRAN_CHECK_BIND_C_TYPE],[
end module]])],
[AS_VAR_SET(bind_c_type_var, yes)],
[AS_VAR_SET(bind_c_type_var, no)])
rm -rf *.mod 2>/dev/null
AC_LANG_POP([Fortran])
])

Expand Down
43 changes: 28 additions & 15 deletions config/ompi_setup_mpi_fortran.m4
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ dnl Copyright (c) 2006-2008 Sun Microsystems, Inc. All rights reserved.
dnl Copyright (c) 2006-2007 Los Alamos National Security, LLC. All rights
dnl reserved.
dnl Copyright (c) 2009 Oak Ridge National Labs. All rights reserved.
dnl Copyright (c) 2014-2019 Research Organization for Information Science
dnl Copyright (c) 2014-2020 Research Organization for Information Science
dnl and Technology (RIST). All rights reserved.
dnl Copyright (c) 2016 IBM Corporation. All rights reserved.
dnl Copyright (c) 2018 FUJITSU LIMITED. All rights reserved.
Expand Down Expand Up @@ -276,6 +276,9 @@ AC_DEFUN([OMPI_SETUP_MPI_FORTRAN],[
OMPI_FORTRAN_STATUS_SIZE=$num_ints
AC_MSG_RESULT([$OMPI_FORTRAN_STATUS_SIZE Fortran INTEGERs])
AC_SUBST(OMPI_FORTRAN_STATUS_SIZE)
AC_DEFINE_UNQUOTED([OMPI_FORTRAN_STATUS_SIZE],
[$OMPI_FORTRAN_STATUS_SIZE],
[The number or Fortran INTEGER in MPI Status])

# Setup for the compilers that don't support ignore TKR functionality
OPAL_UNIQ(OMPI_FORTRAN_IKINDS)
Expand Down Expand Up @@ -384,6 +387,18 @@ AC_DEFUN([OMPI_SETUP_MPI_FORTRAN],[
[OMPI_TRY_FORTRAN_BINDINGS=$OMPI_FORTRAN_MPIFH_BINDINGS
AC_MSG_RESULT([no])])

OMPI_FORTRAN_HAVE_BIND_C_TYPE=0
OMPI_FORTRAN_HAVE_TYPE_MPI_STATUS=0

AS_IF([test $OMPI_BUILD_FORTRAN_BINDINGS -ge $OMPI_FORTRAN_USEMPI_BINDINGS],
[OMPI_FORTRAN_CHECK_BIND_C_TYPE(
[OMPI_FORTRAN_HAVE_BIND_C_TYPE=1
OMPI_FORTRAN_HAVE_TYPE_MPI_STATUS=1])])

AC_SUBST(OMPI_FORTRAN_HAVE_TYPE_MPI_STATUS)
AM_CONDITIONAL(OMPI_FORTRAN_HAVE_TYPE_MPI_STATUS,
[test $OMPI_FORTRAN_HAVE_TYPE_MPI_STATUS -eq 1])

#---------------------------------
# Fortran use mpi_f08 MPI bindings
#---------------------------------
Expand Down Expand Up @@ -419,14 +434,11 @@ AC_DEFUN([OMPI_SETUP_MPI_FORTRAN],[
[OMPI_FORTRAN_HAVE_BIND_C_SUB=0
OMPI_BUILD_FORTRAN_BINDINGS=$OMPI_FORTRAN_USEMPI_BINDINGS])])

OMPI_FORTRAN_HAVE_BIND_C_TYPE=0
AS_IF([test $OMPI_TRY_FORTRAN_BINDINGS -ge $OMPI_FORTRAN_USEMPIF08_BINDINGS && \
test $OMPI_BUILD_FORTRAN_BINDINGS -ge $OMPI_FORTRAN_USEMPIF08_BINDINGS],
[ # If we don't have TYPE, BIND(C), we won't build mpi_f08 at all
OMPI_FORTRAN_CHECK_BIND_C_TYPE(
[OMPI_FORTRAN_HAVE_BIND_C_TYPE=1],
[OMPI_FORTRAN_HAVE_BIND_C_TYPE=0
OMPI_BUILD_FORTRAN_BINDINGS=$OMPI_FORTRAN_USEMPI_BINDINGS])])
AS_IF([test $OMPI_FORTRAN_HAVE_BIND_C_TYPE -ne 1],
[OMPI_BUILD_FORTRAN_BINDINGS=$OMPI_FORTRAN_USEMPI_BINDINGS])])

# Per discussion on the devel list starting here:
# https://www.open-mpi.org/community/lists/devel/2014/01/13799.php
Expand Down Expand Up @@ -698,6 +710,16 @@ end type test_mpi_handle],
AM_CONDITIONAL(OMPI_BUILD_FORTRAN_USEMPI_IGNORE_TKR_BINDINGS,
[test $OMPI_BUILD_FORTRAN_BINDINGS -ge $OMPI_FORTRAN_USEMPI_BINDINGS && \
test $OMPI_FORTRAN_HAVE_IGNORE_TKR -eq 1])
# True if we support TYPE, BIND(C)
AC_DEFINE_UNQUOTED(OMPI_FORTRAN_HAVE_BIND_C_TYPE,
[$OMPI_FORTRAN_HAVE_BIND_C_TYPE],
[For ompi_info: Whether the compiler supports TYPE, BIND(C) or not])

# For mpif-status.h, configure-fortran-output.h, mpi-f08-types.F90 (and ompi_info)
AC_SUBST([OMPI_FORTRAN_HAVE_PRIVATE])
AC_DEFINE_UNQUOTED([OMPI_FORTRAN_HAVE_PRIVATE],
[$OMPI_FORTRAN_HAVE_PRIVATE],
[For mpif-status.h, mpi-f08-types.f90 and ompi_info: whether the compiler supports the "private" keyword or not (used in TYPE(MPI_Status))])

# -------------------
# use mpi_f08 final setup
Expand Down Expand Up @@ -746,22 +768,13 @@ end type test_mpi_handle],
AC_DEFINE_UNQUOTED(OMPI_FORTRAN_HAVE_BIND_C_SUB,
[$OMPI_FORTRAN_HAVE_BIND_C_SUB],
[For ompi_info: Whether the compiler supports SUBROUTINE ... BIND(C) or not])
AC_DEFINE_UNQUOTED(OMPI_FORTRAN_HAVE_BIND_C_TYPE,
[$OMPI_FORTRAN_HAVE_BIND_C_TYPE],
[For ompi_info: Whether the compiler supports TYPE, BIND(C) or not])
AC_DEFINE_UNQUOTED(OMPI_FORTRAN_HAVE_BIND_C_TYPE_NAME,
[$OMPI_FORTRAN_HAVE_BIND_C_TYPE_NAME],
[For ompi_info: Whether the compiler supports TYPE, BIND(C, NAME="name") or not])
AC_DEFINE_UNQUOTED([OMPI_FORTRAN_HAVE_OPTIONAL_ARGS],
[$OMPI_FORTRAN_HAVE_OPTIONAL_ARGS],
[For ompi_info: whether the Fortran compiler supports optional arguments or not])

# For configure-fortran-output.h, mpi-f08-types.F90 (and ompi_info)
AC_SUBST([OMPI_FORTRAN_HAVE_PRIVATE])
AC_DEFINE_UNQUOTED([OMPI_FORTRAN_HAVE_PRIVATE],
[$OMPI_FORTRAN_HAVE_PRIVATE],
[For mpi-f08-types.f90 and ompi_info: whether the compiler supports the "private" keyword or not (used in MPI_Status)])

# For configure-fortran-output.h, mpi-f08-interfaces-callbacks.F90
# (and ompi_info)
AC_SUBST([OMPI_FORTRAN_HAVE_ABSTRACT])
Expand Down
6 changes: 4 additions & 2 deletions ompi/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
# Copyright (c) 2013-2015 Los Alamos National Security, LLC. All rights
# reserved.
# Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
# Copyright (c) 2015-2018 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# Copyright (c) 2015-2020 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# Copyright (c) 2016 IBM Corporation. All rights reserved.
# Copyright (c) 2018 FUJITSU LIMITED. All rights reserved.
# $COPYRIGHT$
Expand Down Expand Up @@ -88,6 +88,7 @@ SUBDIRS = \
. \
$(OMPI_MPIEXT_MPIFH_DIRS) \
mpi/fortran/mpif-h \
mpi/fortran/use-mpi \
$(OMPI_MPIEXT_USEMPI_DIR) \
$(OMPI_FORTRAN_USEMPI_DIR) \
mpi/fortran/mpiext-use-mpi \
Expand Down Expand Up @@ -121,6 +122,7 @@ DIST_SUBDIRS = \
mpi/tool \
mpi/fortran/base \
mpi/fortran/mpif-h \
mpi/fortran/use-mpi \
mpi/fortran/use-mpi-tkr \
mpi/fortran/use-mpi-ignore-tkr \
mpi/fortran/mpiext-use-mpi \
Expand Down
29 changes: 27 additions & 2 deletions ompi/include/mpi.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
* reserved.
* Copyright (c) 2011-2013 INRIA. All rights reserved.
* Copyright (c) 2015 University of Houston. All rights reserved.
* Copyright (c) 2015-2018 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2015-2020 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2017-2019 IBM Corporation. All rights reserved.
* Copyright (c) 2018 FUJITSU LIMITED. All rights reserved.
* $COPYRIGHT$
Expand Down Expand Up @@ -98,6 +98,9 @@
/* Maximum length of processor names (default is 256) */
#undef OPAL_MAX_PROCESSOR_NAME

/* The number or Fortran INTEGER in MPI Status */
#undef OMPI_FORTRAN_STATUS_SIZE

/* Whether we have FORTRAN LOGICAL*1 or not */
#undef OMPI_HAVE_FORTRAN_LOGICAL1

Expand Down Expand Up @@ -408,6 +411,7 @@ typedef struct ompi_op_t *MPI_Op;
typedef struct ompi_request_t *MPI_Request;
typedef struct ompi_message_t *MPI_Message;
typedef struct ompi_status_public_t MPI_Status;
typedef struct ompi_f08_status_public_t MPI_F08_status;
typedef struct ompi_win_t *MPI_Win;
typedef struct mca_base_var_enum_t *MPI_T_enum;
typedef struct ompi_mpit_cvar_handle_t *MPI_T_cvar_handle;
Expand All @@ -432,6 +436,19 @@ struct ompi_status_public_t {
};
typedef struct ompi_status_public_t ompi_status_public_t;

/*
* MPI_F08_status
*/
struct ompi_f08_status_public_t {
/* These fields are publicly defined in the MPI specification.
User applications may freely read from these fields. */
MPI_Fint MPI_SOURCE;
MPI_Fint MPI_TAG;
MPI_Fint MPI_ERROR;
MPI_Fint internal[OMPI_FORTRAN_STATUS_SIZE - 3];
};
typedef struct ompi_f08_status_public_t ompi_f08_status_public_t;

/*
* User typedefs
*/
Expand Down Expand Up @@ -1763,7 +1780,11 @@ OMPI_DECLSPEC int MPI_Ssend(const void *buf, int count, MPI_Datatype datatype,
OMPI_DECLSPEC int MPI_Start(MPI_Request *request);
OMPI_DECLSPEC int MPI_Startall(int count, MPI_Request array_of_requests[]);
OMPI_DECLSPEC int MPI_Status_c2f(const MPI_Status *c_status, MPI_Fint *f_status);
OMPI_DECLSPEC int MPI_Status_c2f08(const MPI_Status *c_status, MPI_F08_status *f08_status);
OMPI_DECLSPEC int MPI_Status_f082c(const MPI_F08_status *f08_status, MPI_Status *c_status);
OMPI_DECLSPEC int MPI_Status_f082f(const MPI_F08_status *f08_status, MPI_Fint *f_status);
OMPI_DECLSPEC int MPI_Status_f2c(const MPI_Fint *f_status, MPI_Status *c_status);
OMPI_DECLSPEC int MPI_Status_f2f08(const MPI_Fint *f_status, MPI_F08_status *f08_status);
OMPI_DECLSPEC int MPI_Status_set_cancelled(MPI_Status *status, int flag);
OMPI_DECLSPEC int MPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype,
int count);
Expand Down Expand Up @@ -2424,7 +2445,11 @@ OMPI_DECLSPEC int PMPI_Ssend(const void *buf, int count, MPI_Datatype datatype,
OMPI_DECLSPEC int PMPI_Start(MPI_Request *request);
OMPI_DECLSPEC int PMPI_Startall(int count, MPI_Request array_of_requests[]);
OMPI_DECLSPEC int PMPI_Status_c2f(const MPI_Status *c_status, MPI_Fint *f_status);
OMPI_DECLSPEC int PMPI_Status_c2f08(const MPI_Status *c_status, MPI_F08_status *f08_status);
OMPI_DECLSPEC int PMPI_Status_f082f(const MPI_F08_status *f08_status, MPI_Fint *f_status);
OMPI_DECLSPEC int PMPI_Status_f082c(const MPI_F08_status *f08_status, MPI_Status *c_status);
OMPI_DECLSPEC int PMPI_Status_f2c(const MPI_Fint *f_status, MPI_Status *c_status);
OMPI_DECLSPEC int PMPI_Status_f2f08(const MPI_Fint *f_status, MPI_F08_status *f08_status);
OMPI_DECLSPEC int PMPI_Status_set_cancelled(MPI_Status *status, int flag);
OMPI_DECLSPEC int PMPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype,
int count);
Expand Down
8 changes: 6 additions & 2 deletions ompi/mpi/c/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
# Copyright (c) 2012-2013 Inria. All rights reserved.
# Copyright (c) 2013-2018 Los Alamos National Security, LLC. All rights
# reserved.
# Copyright (c) 2015-2018 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# Copyright (c) 2015-2020 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
Expand Down Expand Up @@ -339,7 +339,11 @@ libmpi_c_mpi_la_SOURCES = \
start.c \
startall.c \
status_c2f.c \
status_c2f08.c \
status_f082c.c \
status_f082f.c \
status_f2c.c \
status_f2f08.c \
status_set_cancelled.c \
status_set_elements.c \
status_set_elements_x.c \
Expand Down
8 changes: 6 additions & 2 deletions ompi/mpi/c/profile/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
# Copyright (c) 2012-2013 Inria. All rights reserved.
# Copyright (c) 2013 Los Alamos National Security, LLC. All rights
# reserved.
# Copyright (c) 2015-2018 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# Copyright (c) 2015-2020 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
Expand Down Expand Up @@ -319,6 +319,10 @@ nodist_libmpi_c_pmpi_la_SOURCES = \
pstart.c \
pstartall.c \
pstatus_c2f.c \
pstatus_c2f08.c \
pstatus_f082c.c \
pstatus_f082f.c \
pstatus_f2f08.c \
pstatus_f2c.c \
pstatus_set_cancelled.c \
pstatus_set_elements.c \
Expand Down
3 changes: 2 additions & 1 deletion ompi/mpi/c/status_c2f.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,9 @@ int MPI_Status_c2f(const MPI_Status *c_status, MPI_Fint *f_status)
get truncated). But if sizeof(int) == sizeof(INTEGER) or
sizeof(int) < sizeof(INTEGER), everything should be kosher. */
c_ints = (const int*)c_status;
for( i = 0; i < (int)(sizeof(MPI_Status) / sizeof(int)); i++ )
for( i = 0; i < (int)(sizeof(MPI_Status) / sizeof(int)); i++ ) {
f_status[i] = OMPI_INT_2_FINT(c_ints[i]);
}

return MPI_SUCCESS;
}
87 changes: 87 additions & 0 deletions ompi/mpi/c/status_c2f08.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
/* -*- 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
* Corporation. All rights reserved.
* Copyright (c) 2004-2005 The University of Tennessee and The University
* of Tennessee Research Foundation. All rights
* reserved.
* Copyright (c) 2004-2008 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2010-2012 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2013 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2015-2020 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
#include "ompi_config.h"
#include <stdio.h>

#include "ompi/mpi/c/bindings.h"
#include "ompi/runtime/params.h"
#include "ompi/communicator/communicator.h"
#include "ompi/errhandler/errhandler.h"
#include "ompi/mpi/fortran/base/fint_2_int.h"
#include "ompi/mpi/fortran/base/constants.h"
#include "ompi/memchecker.h"

#if OMPI_BUILD_MPI_PROFILING
#if OPAL_HAVE_WEAK_SYMBOLS
#pragma weak MPI_Status_c2f08 = PMPI_Status_c2f08
#endif
#define MPI_Status_c2f08 PMPI_Status_c2f08
#endif

static const char FUNC_NAME[] = "MPI_Status_c2f08";


int MPI_Status_c2f08(const MPI_Status *c_status, MPI_F08_status *f08_status)
{
const int *c_ints;
MEMCHECKER(
if(c_status != MPI_STATUSES_IGNORE) {
/*
* Before checking the complete status, we need to reset the definedness
* of the MPI_ERROR-field (single-completion calls wait/test).
*/
opal_memchecker_base_mem_defined((void*)&c_status->MPI_ERROR, sizeof(int));
memchecker_status(c_status);
}
);

OPAL_CR_NOOP_PROGRESS();

if (MPI_PARAM_CHECK) {
OMPI_ERR_INIT_FINALIZE(FUNC_NAME);

/* MPI-4:18.2.5 implies that if you pass in
MPI_STATUS[ES]_IGNORE, it's erroneous */
ggouaillardet marked this conversation as resolved.
Show resolved Hide resolved

if (NULL == c_status || MPI_STATUS_IGNORE == c_status ||
MPI_STATUSES_IGNORE == c_status || NULL == f08_status) {
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD,
MPI_ERR_IN_STATUS, FUNC_NAME);
}
}

/* ***NOTE*** See huge comment in status_c2f.c (yes, I know
there's a size_t member in the C MPI_Status -- go
read that comment for an explanation why copying
everything as a bunch of int's is ok). */
f08_status->MPI_SOURCE = OMPI_INT_2_FINT(c_status->MPI_SOURCE);
f08_status->MPI_TAG = OMPI_INT_2_FINT(c_status->MPI_TAG);
f08_status->MPI_ERROR = OMPI_INT_2_FINT(c_status->MPI_ERROR);
c_ints = (const int *)c_status + 3;
for(int i = 0; i < (int)(sizeof(MPI_Status) / sizeof(int) - 3); i++ ) {
f08_status->internal[i] = OMPI_INT_2_FINT(c_ints[i]);
jsquyres marked this conversation as resolved.
Show resolved Hide resolved
}

return MPI_SUCCESS;
}
Loading