Skip to content

Commit 23d83fb

Browse files
committed
datatype: Add support for MPI_TYPECLASS_LOGICAL
Signed-off-by: Lisandro Dalcin <dalcinl@gmail.com>
1 parent de98e82 commit 23d83fb

File tree

7 files changed

+18
-9
lines changed

7 files changed

+18
-9
lines changed

docs/man-openmpi/man3/MPI_Type_match_size.3.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ The function returns an MPI datatype matching a local variable of type
6565
(*typeclass*, *size*). The returned type is a reference (handle) to a
6666
predefined named datatype, not a duplicate. This type cannot be freed.
6767

68-
The value of *typeclass* may be set to one of MPI_TYPECLASS_REAL,
69-
MPI_TYPECLASS_INTEGER, or MPI_TYPECLASS_COMPLEX, corresponding to the
70-
desired datatype.
68+
The value of *typeclass* may be set to one of MPI_TYPECLASS_LOGICAL,
69+
MPI_TYPECLASS_INTEGER, MPI_TYPECLASS_REAL, or MPI_TYPECLASS_COMPLEX,
70+
corresponding to the desired datatype.
7171

7272
MPI_type_match_size can be used to obtain a size-specific type that
7373
matches a Fortran numeric intrinsic type: first call :ref:`MPI_Sizeof` to

ompi/datatype/ompi_datatype.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ BEGIN_C_DECLS
4949
#define OMPI_DATATYPE_FLAG_ANALYZED 0x0400
5050
#define OMPI_DATATYPE_FLAG_MONOTONIC 0x0800
5151
/* Keep trace of the type of the predefined datatypes */
52+
#define OMPI_DATATYPE_FLAG_DATA_BOOL 0x0000 /* TODO: what to do here? */
5253
#define OMPI_DATATYPE_FLAG_DATA_INT 0x1000
5354
#define OMPI_DATATYPE_FLAG_DATA_FLOAT 0x2000
5455
#define OMPI_DATATYPE_FLAG_DATA_COMPLEX 0x3000

ompi/datatype/ompi_datatype_module.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ ompi_predefined_datatype_t ompi_mpi_complex32 = OMPI_DATATYPE_INIT_UNAVAILA
179179
/*
180180
* Fortran datatypes
181181
*/
182-
ompi_predefined_datatype_t ompi_mpi_logical = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL, OMPI_SIZEOF_FORTRAN_LOGICAL, OMPI_ALIGNMENT_FORTRAN_LOGICAL, 0 );
182+
ompi_predefined_datatype_t ompi_mpi_logical = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL, OMPI_SIZEOF_FORTRAN_LOGICAL, OMPI_ALIGNMENT_FORTRAN_LOGICAL, OMPI_DATATYPE_FLAG_DATA_BOOL );
183183
ompi_predefined_datatype_t ompi_mpi_character = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, CHARACTER, 1, OPAL_ALIGNMENT_CHAR, 0 );
184184
ompi_predefined_datatype_t ompi_mpi_integer = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, INTEGER, OMPI_SIZEOF_FORTRAN_INTEGER, OMPI_ALIGNMENT_FORTRAN_INTEGER, OMPI_DATATYPE_FLAG_DATA_INT );
185185
ompi_predefined_datatype_t ompi_mpi_real = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (FLOAT, REAL, OMPI_SIZEOF_FORTRAN_REAL, OMPI_ALIGNMENT_FORTRAN_REAL, OMPI_DATATYPE_FLAG_DATA_FLOAT );
@@ -204,27 +204,27 @@ ompi_predefined_datatype_t ompi_mpi_2dblcplex = OMPI_DATATYPE_INIT_DEFER (2
204204

205205
/* For each of these we figure out, whether it is available -- otherwise it's set to unavailable */
206206
#if OMPI_HAVE_FORTRAN_LOGICAL1
207-
ompi_predefined_datatype_t ompi_mpi_logical1 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL1, OMPI_SIZEOF_FORTRAN_LOGICAL1, OMPI_ALIGNMENT_FORTRAN_LOGICAL1, 0);
207+
ompi_predefined_datatype_t ompi_mpi_logical1 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL1, OMPI_SIZEOF_FORTRAN_LOGICAL1, OMPI_ALIGNMENT_FORTRAN_LOGICAL1, OMPI_DATATYPE_FLAG_DATA_BOOL);
208208
#else
209209
ompi_predefined_datatype_t ompi_mpi_logical1 = OMPI_DATATYPE_INIT_UNAVAILABLE (LOGICAL1, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
210210
#endif
211211
#if OMPI_HAVE_FORTRAN_LOGICAL2
212-
ompi_predefined_datatype_t ompi_mpi_logical2 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL2, OMPI_SIZEOF_FORTRAN_LOGICAL2, OMPI_ALIGNMENT_FORTRAN_LOGICAL2, 0);
212+
ompi_predefined_datatype_t ompi_mpi_logical2 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL2, OMPI_SIZEOF_FORTRAN_LOGICAL2, OMPI_ALIGNMENT_FORTRAN_LOGICAL2, OMPI_DATATYPE_FLAG_DATA_BOOL);
213213
#else
214214
ompi_predefined_datatype_t ompi_mpi_logical2 = OMPI_DATATYPE_INIT_UNAVAILABLE (LOGICAL2, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
215215
#endif
216216
#if OMPI_HAVE_FORTRAN_LOGICAL4
217-
ompi_predefined_datatype_t ompi_mpi_logical4 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL4, OMPI_SIZEOF_FORTRAN_LOGICAL4, OMPI_ALIGNMENT_FORTRAN_LOGICAL4, 0);
217+
ompi_predefined_datatype_t ompi_mpi_logical4 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL4, OMPI_SIZEOF_FORTRAN_LOGICAL4, OMPI_ALIGNMENT_FORTRAN_LOGICAL4, OMPI_DATATYPE_FLAG_DATA_BOOL);
218218
#else
219219
ompi_predefined_datatype_t ompi_mpi_logical4 = OMPI_DATATYPE_INIT_UNAVAILABLE (LOGICAL4, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
220220
#endif
221221
#if OMPI_HAVE_FORTRAN_LOGICAL8
222-
ompi_predefined_datatype_t ompi_mpi_logical8 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL8, OMPI_SIZEOF_FORTRAN_LOGICAL8, OMPI_ALIGNMENT_FORTRAN_LOGICAL8, 0);
222+
ompi_predefined_datatype_t ompi_mpi_logical8 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL8, OMPI_SIZEOF_FORTRAN_LOGICAL8, OMPI_ALIGNMENT_FORTRAN_LOGICAL8, OMPI_DATATYPE_FLAG_DATA_BOOL);
223223
#else
224224
ompi_predefined_datatype_t ompi_mpi_logical8 = OMPI_DATATYPE_INIT_UNAVAILABLE (LOGICAL8, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
225225
#endif
226226
#if OMPI_HAVE_FORTRAN_LOGICAL16
227-
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);
227+
ompi_predefined_datatype_t ompi_mpi_logical16 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL16, OMPI_SIZEOF_FORTRAN_LOGICAL16, OMPI_ALIGNMENT_FORTRAN_LOGICAL16, OMPI_DATATYPE_FLAG_DATA_BOOL);
228228
#else
229229
ompi_predefined_datatype_t ompi_mpi_logical16 = OMPI_DATATYPE_INIT_UNAVAILABLE (LOGICAL16, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
230230
#endif

ompi/include/mpi.h.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1381,6 +1381,7 @@ OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_ub;
13811381
#define MPI_TYPECLASS_INTEGER 1
13821382
#define MPI_TYPECLASS_REAL 2
13831383
#define MPI_TYPECLASS_COMPLEX 3
1384+
#define MPI_TYPECLASS_LOGICAL 4
13841385

13851386
/* Aint helper macros (MPI-3.1) */
13861387
#define MPI_Aint_add(base, disp) ((MPI_Aint) ((char *) (base) + (disp)))

ompi/include/mpif-values.pl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ sub read_value_from_file {
287287
$constants->{MPI_TYPECLASS_INTEGER} = 1;
288288
$constants->{MPI_TYPECLASS_REAL} = 2;
289289
$constants->{MPI_TYPECLASS_COMPLEX} = 3;
290+
$constants->{MPI_TYPECLASS_LOGICAL} = 4;
290291
$constants->{MPI_MODE_NOCHECK} = 1;
291292
$constants->{MPI_MODE_NOPRECEDE} = 2;
292293
$constants->{MPI_MODE_NOPUT} = 4;

ompi/mpi/c/type_match_size.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ int MPI_Type_match_size(int typeclass, int size, MPI_Datatype *type)
5454
case MPI_TYPECLASS_COMPLEX:
5555
*type = (MPI_Datatype)ompi_datatype_match_size( size, OMPI_DATATYPE_FLAG_DATA_COMPLEX, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
5656
break;
57+
case MPI_TYPECLASS_LOGICAL:
58+
*type = (MPI_Datatype)ompi_datatype_match_size( size, OMPI_DATATYPE_FLAG_DATA_BOOL, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
59+
break;
5760
default:
5861
*type = &ompi_mpi_datatype_null.dt;
5962
}

ompi/mpi/fortran/mpif-h/type_match_size_f.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ void ompi_type_match_size_f(MPI_Fint *typeclass, MPI_Fint *size, MPI_Fint *type,
9797
case MPI_TYPECLASS_COMPLEX:
9898
c_type = (MPI_Datatype)ompi_datatype_match_size( c_size, OMPI_DATATYPE_FLAG_DATA_COMPLEX, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
9999
break;
100+
case MPI_TYPECLASS_LOGICAL:
101+
c_type = (MPI_Datatype)ompi_datatype_match_size( c_size, OMPI_DATATYPE_FLAG_DATA_BOOL, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
102+
break;
100103
default:
101104
c_type = &ompi_mpi_datatype_null.dt;
102105
}

0 commit comments

Comments
 (0)