Skip to content

Commit a193190

Browse files
committed
datatype: Add preliminary support for MPI_LOGICAL16
Signed-off-by: Lisandro Dalcin <[email protected]>
1 parent fdd3da8 commit a193190

File tree

8 files changed

+41
-4
lines changed

8 files changed

+41
-4
lines changed

config/ompi_setup_mpi_fortran.m4

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,14 +151,16 @@ AC_DEFUN([OMPI_SETUP_MPI_FORTRAN],[
151151

152152
OMPI_FORTRAN_CHECK([LOGICAL], [yes],
153153
[char, int32_t, int, int64_t, long long, long], [-1], [yes])
154-
OMPI_FORTRAN_CHECK([LOGICAL*1], [yes],
154+
OMPI_FORTRAN_CHECK([LOGICAL*1], [no],
155155
[char, int8_t, short, int32_t, int, int64_t, long long, long], [1], [yes])
156-
OMPI_FORTRAN_CHECK([LOGICAL*2], [yes],
156+
OMPI_FORTRAN_CHECK([LOGICAL*2], [no],
157157
[short, int16_t, int32_t, int, int64_t, long long, long], [2], [yes])
158-
OMPI_FORTRAN_CHECK([LOGICAL*4], [yes],
158+
OMPI_FORTRAN_CHECK([LOGICAL*4], [no],
159159
[int32_t, int, int64_t, long long, long], [4], [yes])
160-
OMPI_FORTRAN_CHECK([LOGICAL*8], [yes],
160+
OMPI_FORTRAN_CHECK([LOGICAL*8], [no],
161161
[int, int64_t, long long, long], [8], [yes])
162+
OMPI_FORTRAN_CHECK([LOGICAL*16], [no],
163+
[int, int64_t, long long, long], [16], [yes])
162164

163165
OMPI_FORTRAN_CHECK([INTEGER], [yes],
164166
[int32_t, int, int64_t, long long, long], [-1], [yes])

ompi/datatype/ompi_datatype_internal.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,20 @@
247247
# define OMPI_DATATYPE_MPI_LOGICAL8 OMPI_DATATYPE_MPI_UNAVAILABLE
248248
#endif
249249

250+
#if OMPI_SIZEOF_FORTRAN_LOGICAL16 == OMPI_SIZEOF_FORTRAN_LOGICAL
251+
# define OMPI_DATATYPE_MPI_LOGICAL16 OMPI_DATATYPE_MPI_LOGICAL
252+
#elif OMPI_SIZEOF_FORTRAN_LOGICAL16 == 1
253+
# define OMPI_DATATYPE_MPI_LOGICAL16 OMPI_DATATYPE_MPI_INT8_T
254+
#elif OMPI_SIZEOF_FORTRAN_LOGICAL16 == 2
255+
# define OMPI_DATATYPE_MPI_LOGICAL16 OMPI_DATATYPE_MPI_INT16_T
256+
#elif OMPI_SIZEOF_FORTRAN_LOGICAL16 == 4
257+
# define OMPI_DATATYPE_MPI_LOGICAL16 OMPI_DATATYPE_MPI_INT32_T
258+
#elif OMPI_SIZEOF_FORTRAN_LOGICAL16 == 8
259+
# define OMPI_DATATYPE_MPI_LOGICAL16 OMPI_DATATYPE_MPI_INT64_T
260+
#else
261+
# define OMPI_DATATYPE_MPI_LOGICAL16 OMPI_DATATYPE_MPI_UNAVAILABLE
262+
#endif
263+
250264
/* INTEGER */
251265
#if OMPI_SIZEOF_FORTRAN_INTEGER1 == OMPI_SIZEOF_FORTRAN_INTEGER
252266
# define OMPI_DATATYPE_MPI_INTEGER1 OMPI_DATATYPE_MPI_INTEGER

ompi/datatype/ompi_datatype_module.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,11 @@ ompi_predefined_datatype_t ompi_mpi_logical8 = OMPI_DATATYPE_INIT_PREDEFIN
231231
#else
232232
ompi_predefined_datatype_t ompi_mpi_logical8 = OMPI_DATATYPE_INIT_UNAVAILABLE (LOGICAL8, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
233233
#endif
234+
#if OMPI_HAVE_FORTRAN_LOGICAL16
235+
ompi_predefined_datatype_t ompi_mpi_logical16 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL16, OMPI_SIZEOF_FORTRAN_LOGICAL16, OMPI_ALIGNMENT_FORTRAN_LOGICAL16, 0);
236+
#else
237+
ompi_predefined_datatype_t ompi_mpi_logical16 = OMPI_DATATYPE_INIT_UNAVAILABLE (LOGICAL16, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
238+
#endif
234239
#if OMPI_HAVE_FORTRAN_REAL2
235240
ompi_predefined_datatype_t ompi_mpi_real2 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (FLOAT, REAL2, OMPI_SIZEOF_FORTRAN_REAL2, OMPI_ALIGNMENT_FORTRAN_REAL2, OMPI_DATATYPE_FLAG_DATA_FLOAT);
236241
#else
@@ -673,6 +678,9 @@ int32_t ompi_datatype_init( void )
673678
MOOG(c_short_float_complex, 75);
674679
MOOG(cxx_sfltcplex, 76);
675680

681+
/* Datatype added in MPI 5.0 */
682+
MOOG(logical16, 77);
683+
676684
/**
677685
* Now make sure all non-contiguous types are marked as such.
678686
*/

ompi/include/mpi.h.in

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,9 @@
130130
/* Whether we have FORTRAN LOGICAL*8 or not */
131131
#undef OMPI_HAVE_FORTRAN_LOGICAL8
132132

133+
/* Whether we have FORTRAN LOGICAL*16 or not */
134+
#undef OMPI_HAVE_FORTRAN_LOGICAL16
135+
133136
/* Whether we have FORTRAN INTEGER*1 or not */
134137
#undef OMPI_HAVE_FORTRAN_INTEGER1
135138

@@ -1194,6 +1197,7 @@ OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_logical1;
11941197
OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_logical2;
11951198
OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_logical4;
11961199
OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_logical8;
1200+
OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_logical16;
11971201
OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_integer1;
11981202
OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_integer2;
11991203
OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_integer4;
@@ -1341,6 +1345,9 @@ OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_ub;
13411345
#if OMPI_HAVE_FORTRAN_LOGICAL8
13421346
#define MPI_LOGICAL8 OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_logical8)
13431347
#endif
1348+
#if OMPI_HAVE_FORTRAN_LOGICAL16
1349+
#define MPI_LOGICAL16 OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_logical16)
1350+
#endif
13441351
#define MPI_INTEGER OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_integer)
13451352
#if OMPI_HAVE_FORTRAN_INTEGER1
13461353
#define MPI_INTEGER1 OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_integer1)

ompi/include/mpif-values.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,9 @@
150150
'MPI_C_LONG_DOUBLE_COMPLEX': 71,
151151
'MPI_COUNT': 72,
152152
'MPI_COMPLEX4': 73,
153+
# Leave room for 16bit datatypes
154+
# See https://github.com/mpi-forum/mpi-issues/issues/65
155+
'MPI_LOGICAL16': 77,
153156
'MPI_MESSAGE_NO_PROC': 1,
154157
'MPI_INFO_ENV': 1,
155158
}

ompi/mpi/fortran/use-mpi-f08/mod/mpi-f08-types.F90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ module mpi_f08_types
154154
type(MPI_Datatype), parameter :: MPI_LOGICAL2 = MPI_Datatype(OMPI_MPI_LOGICAL2)
155155
type(MPI_Datatype), parameter :: MPI_LOGICAL4 = MPI_Datatype(OMPI_MPI_LOGICAL4)
156156
type(MPI_Datatype), parameter :: MPI_LOGICAL8 = MPI_Datatype(OMPI_MPI_LOGICAL8)
157+
type(MPI_Datatype), parameter :: MPI_LOGICAL16 = MPI_Datatype(OMPI_MPI_LOGICAL16)
157158
type(MPI_Datatype), parameter :: MPI_C_BOOL = MPI_Datatype(OMPI_MPI_C_BOOL)
158159
type(MPI_Datatype), parameter :: MPI_CXX_BOOL = MPI_Datatype(OMPI_MPI_CXX_BOOL)
159160
type(MPI_Datatype), parameter :: MPI_COUNT = MPI_Datatype(OMPI_MPI_COUNT)

ompi/runtime/mpiruntime.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_logical1_addr;
101101
OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_logical2_addr;
102102
OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_logical4_addr;
103103
OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_logical8_addr;
104+
OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_logical16_addr;
104105
OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_integer_addr;
105106
OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_integer1_addr;
106107
OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_integer2_addr;

ompi/runtime/ompi_mpi_init.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ ompi_predefined_datatype_t *ompi_mpi_logical1_addr = &ompi_mpi_logical1;
146146
ompi_predefined_datatype_t *ompi_mpi_logical2_addr = &ompi_mpi_logical2;
147147
ompi_predefined_datatype_t *ompi_mpi_logical4_addr = &ompi_mpi_logical4;
148148
ompi_predefined_datatype_t *ompi_mpi_logical8_addr = &ompi_mpi_logical8;
149+
ompi_predefined_datatype_t *ompi_mpi_logical16_addr = &ompi_mpi_logical16;
149150
ompi_predefined_datatype_t *ompi_mpi_integer_addr = &ompi_mpi_integer;
150151
ompi_predefined_datatype_t *ompi_mpi_integer1_addr = &ompi_mpi_integer1;
151152
ompi_predefined_datatype_t *ompi_mpi_integer2_addr = &ompi_mpi_integer2;

0 commit comments

Comments
 (0)