From 3ee2e44a3edbbc748f872f517d1cd9082dce0baf Mon Sep 17 00:00:00 2001 From: Augustin Degomme Date: Mon, 22 Jul 2019 13:43:05 +0200 Subject: [PATCH 1/1] better handling of some datatypes in fortran --- include/smpi/mpif.h.in | 32 ++++++++++--------- include/smpi/smpi.h | 1 + src/smpi/bindings/smpi_f77.cpp | 7 ++-- src/smpi/mpi/smpi_datatype.cpp | 6 ++-- src/smpi/mpi/smpi_op.cpp | 9 +++++- .../mpich3-test/f77/datatype/CMakeLists.txt | 4 +-- 6 files changed, 36 insertions(+), 23 deletions(-) diff --git a/include/smpi/mpif.h.in b/include/smpi/mpif.h.in index d30387a447..d795cca862 100644 --- a/include/smpi/mpif.h.in +++ b/include/smpi/mpif.h.in @@ -128,8 +128,8 @@ integer MPI_DOUBLE_PRECISION, MPI_COMPLEX, MPI_DOUBLE_COMPLEX integer MPI_2INTEGER, MPI_LOGICAL1, MPI_LOGICAL2, MPI_LOGICAL4 integer MPI_LOGICAL8, MPI_2REAL, MPI_2DOUBLE_PRECISION - integer MPI_AINT, MPI_OFFSET, MPI_COUNT - integer MPI_REAL16, MPI_PACKED + integer MPI_AINT, MPI_OFFSET, MPI_COUNT, MPI_REAL16 + integer MPI_PACKED, MPI_COMPLEX8, MPI_COMPLEX16, MPI_COMPLEX32 integer MPI_MAX, MPI_MIN, MPI_MAXLOC, MPI_MINLOC integer MPI_SUM, MPI_PROD, MPI_LAND, MPI_LOR, MPI_LXOR, MPI_BAND @@ -188,19 +188,21 @@ parameter(MPI_COUNT=24) parameter(MPI_REAL16=25) parameter(MPI_PACKED=26) - - parameter(MPI_MAX=27) - parameter(MPI_MIN=28) - parameter(MPI_MAXLOC=29) - parameter(MPI_MINLOC=30) - parameter(MPI_SUM=31) - parameter(MPI_PROD=32) - parameter(MPI_LAND=33) - parameter(MPI_LOR=34) - parameter(MPI_LXOR=35) - parameter(MPI_BAND=36) - parameter(MPI_BOR=37) - parameter(MPI_BXOR=38) + parameter(MPI_COMPLEX8=27) + parameter(MPI_COMPLEX16=28) + parameter(MPI_COMPLEX32=29) + parameter(MPI_MAX=30) + parameter(MPI_MIN=31) + parameter(MPI_MAXLOC=32) + parameter(MPI_MINLOC=33) + parameter(MPI_SUM=34) + parameter(MPI_PROD=35) + parameter(MPI_LAND=36) + parameter(MPI_LOR=37) + parameter(MPI_LXOR=38) + parameter(MPI_BAND=39) + parameter(MPI_BOR=40) + parameter(MPI_BXOR=41) INTEGER MPI_ADDRESS_KIND, MPI_OFFSET_KIND PARAMETER (MPI_ADDRESS_KIND=@CMAKE_SIZEOF_VOID_P@) diff --git a/include/smpi/smpi.h b/include/smpi/smpi.h index 8332ad98e8..30a9ebe1eb 100644 --- a/include/smpi/smpi.h +++ b/include/smpi/smpi.h @@ -234,6 +234,7 @@ typedef SMPI_Info* MPI_Info; #define MPI_STATUS_IGNORE ((MPI_Status*)NULL) #define MPI_STATUSES_IGNORE ((MPI_Status*)NULL) +#define MPI_STATUS_SIZE 5 XBT_PUBLIC_DATA const MPI_Datatype MPI_DATATYPE_NULL; XBT_PUBLIC_DATA const MPI_Datatype MPI_CHAR; diff --git a/src/smpi/bindings/smpi_f77.cpp b/src/smpi/bindings/smpi_f77.cpp index 7af30396b6..1be6ec2330 100644 --- a/src/smpi/bindings/smpi_f77.cpp +++ b/src/smpi/bindings/smpi_f77.cpp @@ -33,8 +33,8 @@ void smpi_init_fortran_types(){ MPI_REAL4->add_f();//MPI_REAL4 MPI_REAL8->add_f();//MPI_REAL8 MPI_DOUBLE->add_f();//MPI_DOUBLE_PRECISION - MPI_C_FLOAT_COMPLEX->add_f();//MPI_COMPLEX - MPI_C_DOUBLE_COMPLEX->add_f();//MPI_DOUBLE_COMPLEX + MPI_COMPLEX8->add_f();//MPI_COMPLEX + MPI_COMPLEX16->add_f();//MPI_DOUBLE_COMPLEX #if defined(__alpha__) || defined(__sparc64__) || defined(__x86_64__) || defined(__ia64__) MPI_2INT->add_f();//MPI_2INTEGER #else @@ -51,6 +51,9 @@ void smpi_init_fortran_types(){ MPI_AINT->add_f();//MPI_COUNT MPI_REAL16->add_f();//MPI_REAL16 MPI_PACKED->add_f();//MPI_PACKED + MPI_COMPLEX8->add_f();//MPI_COMPLEX8 + MPI_COMPLEX16->add_f();//MPI_COMPLEX16 + MPI_COMPLEX32->add_f();//MPI_COMPLEX32 MPI_MAX->add_f(); MPI_MIN->add_f(); diff --git a/src/smpi/mpi/smpi_datatype.cpp b/src/smpi/mpi/smpi_datatype.cpp index 2e79a32ed9..a4b307fd57 100644 --- a/src/smpi/mpi/smpi_datatype.cpp +++ b/src/smpi/mpi/smpi_datatype.cpp @@ -79,9 +79,9 @@ CREATE_MPI_DATATYPE(MPI_REAL4, 39, float); CREATE_MPI_DATATYPE(MPI_REAL8, 40, double); CREATE_MPI_DATATYPE(MPI_REAL16, 41, long double); CREATE_MPI_DATATYPE_NULL(MPI_DATATYPE_NULL, -1); -CREATE_MPI_DATATYPE_NULL(MPI_COMPLEX8, 42); -CREATE_MPI_DATATYPE_NULL(MPI_COMPLEX16, 43); -CREATE_MPI_DATATYPE_NULL(MPI_COMPLEX32, 44); +CREATE_MPI_DATATYPE(MPI_COMPLEX8, 42, float_float); +CREATE_MPI_DATATYPE(MPI_COMPLEX16, 43, double_double); +CREATE_MPI_DATATYPE(MPI_COMPLEX32, 44, double_double); CREATE_MPI_DATATYPE(MPI_INTEGER1, 45, int); CREATE_MPI_DATATYPE(MPI_INTEGER2, 46, int16_t); CREATE_MPI_DATATYPE(MPI_INTEGER4, 47, int32_t); diff --git a/src/smpi/mpi/smpi_op.cpp b/src/smpi/mpi/smpi_op.cpp index 3e5bacea80..008839bf72 100644 --- a/src/smpi/mpi/smpi_op.cpp +++ b/src/smpi/mpi/smpi_op.cpp @@ -13,7 +13,9 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_op, smpi, "Logging specific to SMPI (op)"); #define MAX_OP(a, b) (b) = (a) < (b) ? (b) : (a) #define MIN_OP(a, b) (b) = (a) < (b) ? (a) : (b) #define SUM_OP(a, b) (b) += (a) +#define SUM_OP_COMPLEX(a, b) {(b.value) += (a.value);(b.index) += (a.index);} #define PROD_OP(a, b) (b) *= (a) +#define PROD_OP_COMPLEX(a, b) {(b.value) *= (a.value);(b.index) *= (a.index);} #define LAND_OP(a, b) (b) = (a) && (b) #define LOR_OP(a, b) (b) = (a) || (b) #define LXOR_OP(a, b) (b) = (not(a) && (b)) || ((a) && not(b)) @@ -96,7 +98,10 @@ APPLY_OP_LOOP(MPI_2INT, int_int,op)\ APPLY_OP_LOOP(MPI_2FLOAT, float_float,op)\ APPLY_OP_LOOP(MPI_2DOUBLE, double_double,op)\ APPLY_OP_LOOP(MPI_LONG_DOUBLE_INT, long_double_int,op)\ -APPLY_OP_LOOP(MPI_2LONG, long_long,op) +APPLY_OP_LOOP(MPI_2LONG, long_long,op)\ +APPLY_OP_LOOP(MPI_COMPLEX8, float_float,op)\ +APPLY_OP_LOOP(MPI_COMPLEX16, double_double,op)\ +APPLY_OP_LOOP(MPI_COMPLEX32, double_double,op) #define APPLY_END_OP_LOOP(op) \ { \ @@ -122,6 +127,7 @@ static void sum_func(void *a, void *b, int *length, MPI_Datatype * datatype) APPLY_BASIC_OP_LOOP(SUM_OP) APPLY_FLOAT_OP_LOOP(SUM_OP) APPLY_COMPLEX_OP_LOOP(SUM_OP) + APPLY_PAIR_OP_LOOP(SUM_OP_COMPLEX) APPLY_END_OP_LOOP(SUM_OP) } @@ -130,6 +136,7 @@ static void prod_func(void *a, void *b, int *length, MPI_Datatype * datatype) APPLY_BASIC_OP_LOOP(PROD_OP) APPLY_FLOAT_OP_LOOP(PROD_OP) APPLY_COMPLEX_OP_LOOP(PROD_OP) + APPLY_PAIR_OP_LOOP(PROD_OP_COMPLEX) APPLY_END_OP_LOOP(PROD_OP) } diff --git a/teshsuite/smpi/mpich3-test/f77/datatype/CMakeLists.txt b/teshsuite/smpi/mpich3-test/f77/datatype/CMakeLists.txt index ea628372e0..5132564627 100644 --- a/teshsuite/smpi/mpich3-test/f77/datatype/CMakeLists.txt +++ b/teshsuite/smpi/mpich3-test/f77/datatype/CMakeLists.txt @@ -12,8 +12,8 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/typeaints.h.in typeaints.h @ONLY) foreach(test gaddressf - # allctypesf hindex1f hindexed_blockf packef typecntsf - # typem2f typename3f typenamef typesnamef + allctypesf hindex1f hindexed_blockf packef typecntsf + typem2f typename3f typenamef typesnamef typesubf) add_executable(${test} EXCLUDE_FROM_ALL ${test}.f) add_dependencies(tests ${test}) -- 2.20.1