1
1

opal/ddt: add copy functions for complex types

long double internal representation is arch specific,
and no conversion is done (yet), so MPI_LONG_DOUBLE should not
be used (yet) in heterogeneous mode
Этот коммит содержится в:
Gilles Gouaillardet 2015-05-26 13:07:01 +09:00
родитель 899fb89392
Коммит bc105afb10
3 изменённых файлов: 60 добавлений и 5 удалений

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

@ -4,6 +4,8 @@
* of Tennessee Research Foundation. All rights
* reserved.
* Copyright (c) 2009 Oak Ridge National Labs. All rights reserved.
* Copyright (c) 2015 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -201,6 +203,27 @@ COPY_TYPE( float_16, long double, 1 )
#define copy_float_16 NULL
#endif
#if HAVE_FLOAT__COMPLEX
COPY_TYPE ( float_complex, float _Complex, 1)
#else
/* #error No basic type for copy function for opal_datatype_float_complex found */
#define copy_float_complex NULL
#endif
#if HAVE_DOUBLE__COMPLEX
COPY_TYPE ( double_complex, double _Complex, 1)
#else
/* #error No basic type for copy function for opal_datatype_double_complex found */
#define copy_double_complex NULL
#endif
#if HAVE_LONG_DOUBLE__COMPLEX
COPY_TYPE ( long_double_complex, long double _Complex, 1)
#else
/* #error No basic type for copy function for opal_datatype_long_double_complex found */
#define copy_long_double_complex NULL
#endif
#if SIZEOF_BOOL == SIZEOF_CHAR
COPY_TYPE (bool, char, 1)
#elif SIZEOF_BOOL == SIZEOF_SHORT
@ -238,6 +261,9 @@ conversion_fct_t opal_datatype_copy_functions[OPAL_DATATYPE_MAX_PREDEFINED] = {
(conversion_fct_t)copy_float_8, /* OPAL_DATATYPE_FLOAT8 */
(conversion_fct_t)copy_float_12, /* OPAL_DATATYPE_FLOAT12 */
(conversion_fct_t)copy_float_16, /* OPAL_DATATYPE_FLOAT16 */
(conversion_fct_t)copy_float_complex, /* OPAL_DATATYPE_FLOAT_COMPLEX */
(conversion_fct_t)copy_double_complex, /* OPAL_DATATYPE_DOUBLE_COMPLEX */
(conversion_fct_t)copy_long_double_complex, /* OPAL_DATATYPE_LONG_DOUBLE_COMPLEX */
(conversion_fct_t)copy_bool, /* OPAL_DATATYPE_BOOL */
(conversion_fct_t)copy_wchar, /* OPAL_DATATYPE_WCHAR */
(conversion_fct_t)NULL /* OPAL_DATATYPE_UNAVAILABLE */

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

@ -4,6 +4,8 @@
* of Tennessee Research Foundation. All rights
* reserved.
* Copyright (c) 2009 Oak Ridge National Labs. All rights reserved.
* Copyright (c) 2015 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -281,6 +283,30 @@ COPY_TYPE_HETEROGENEOUS( float16, long double )
#define copy_float16_heterogeneous NULL
#endif
#if HAVE_FLOAT__COMPLEX
// COPY_TYPE_HETEROGENEOUS ( float_complex, float _Complex)
COPY_2TYPE_HETEROGENEOUS( float_complex, float, float )
#else
/* #error No basic type for copy function for opal_datatype_float_complex found */
#define copy_float_complex_heterogeneous NULL
#endif
#if HAVE_DOUBLE__COMPLEX
// COPY_TYPE_HETEROGENEOUS ( double_complex, double _Complex)
COPY_2TYPE_HETEROGENEOUS( double_complex, double, double )
#else
/* #error No basic type for copy function for opal_datatype_double_complex found */
#define copy_double_complex_heterogeneous NULL
#endif
#if HAVE_LONG_DOUBLE__COMPLEX
// COPY_TYPE_HETEROGENEOUS ( long_double_complex, long double _Complex)
COPY_2TYPE_HETEROGENEOUS( long_double_complex, long double, long double )
#else
/* #error No basic type for copy function for opal_datatype_long_double_complex found */
#define copy_long_double_complex_heterogeneous NULL
#endif
COPY_TYPE_HETEROGENEOUS (wchar, wchar_t)
/* table of predefined copy functions - one for each MPI type */
@ -304,6 +330,9 @@ conversion_fct_t opal_datatype_heterogeneous_copy_functions[OPAL_DATATYPE_MAX_PR
(conversion_fct_t) copy_float8_heterogeneous, /* OPAL_DATATYPE_FLOAT8 */
(conversion_fct_t) copy_float12_heterogeneous, /* OPAL_DATATYPE_FLOAT12 */
(conversion_fct_t) copy_float16_heterogeneous, /* OPAL_DATATYPE_FLOAT16 */
(conversion_fct_t) copy_float_complex_heterogeneous, /* OPAL_DATATYPE_FLOAT_COMPLEX */
(conversion_fct_t) copy_double_complex_heterogeneous, /* OPAL_DATATYPE_DOUBLE_COMPLEX */
(conversion_fct_t) copy_long_double_complex_heterogeneous,/* OPAL_DATATYPE_LONG_DOUBLE_COMPLEX */
(conversion_fct_t) copy_cxx_bool_heterogeneous, /* OPAL_DATATYPE_BOOL */
(conversion_fct_t) copy_wchar_heterogeneous, /* OPAL_DATATYPE_WCHAR */
NULL, /* OPAL_DATATYPE_UNAVAILABLE */

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

@ -351,7 +351,7 @@ struct opal_datatype_t;
#define OPAL_DATATYPE_INITIALIZER_FLOAT2(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( float, OPAL_ALIGNMENT_FLOAT, FLOAT2, FLAGS )
#elif SIZEOF_DOUBLE == 2
#define OPAL_DATATYPE_INITIALIZER_FLOAT2(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( double, OPAL_ALIGNMENT_DOUBLE, FLOAT2, FLAGS )
#elif SIZEOF_LONG_DOUBLE == 2
#elif HAVE_LONG_DOUBLE && SIZEOF_LONG_DOUBLE == 2
#define OPAL_DATATYPE_INITIALIZER_FLOAT2(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( long double, OPAL_ALIGNMENT_LONG_DOUBLE, FLOAT2, FLAGS )
#else
#define OPAL_DATATYPE_INITIALIZER_FLOAT2(FLAGS) OPAL_DATATYPE_INITIALIZER_UNAVAILABLE_NAMED( FLOAT2, FLAGS )
@ -361,7 +361,7 @@ struct opal_datatype_t;
#define OPAL_DATATYPE_INITIALIZER_FLOAT4(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( float, OPAL_ALIGNMENT_FLOAT, FLOAT4, FLAGS )
#elif SIZEOF_DOUBLE == 4
#define OPAL_DATATYPE_INITIALIZER_FLOAT4(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( double, OPAL_ALIGNMENT_DOUBLE, FLOAT4, FLAGS )
#elif SIZEOF_LONG_DOUBLE == 4
#elif HAVE_LONG_DOUBLE && SIZEOF_LONG_DOUBLE == 4
#define OPAL_DATATYPE_INITIALIZER_FLOAT4(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( long double, OPAL_ALIGNMENT_LONG_DOUBLE, FLOAT4, FLAGS )
#else
#define OPAL_DATATYPE_INITIALIZER_FLOAT4(FLAGS) OPAL_DATATYPE_INITIALIZER_UNAVAILABLE_NAMED( FLOAT4, FLAGS )
@ -371,7 +371,7 @@ struct opal_datatype_t;
#define OPAL_DATATYPE_INITIALIZER_FLOAT8(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( float, OPAL_ALIGNMENT_FLOAT, FLOAT8, FLAGS )
#elif SIZEOF_DOUBLE == 8
#define OPAL_DATATYPE_INITIALIZER_FLOAT8(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( double, OPAL_ALIGNMENT_DOUBLE, FLOAT8, FLAGS )
#elif SIZEOF_LONG_DOUBLE == 8
#elif HAVE_LONG_DOUBLE && SIZEOF_LONG_DOUBLE == 8
#define OPAL_DATATYPE_INITIALIZER_FLOAT8(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( long double, OPAL_ALIGNMENT_LONG_DOUBLE, FLOAT8, FLAGS )
#else
#define OPAL_DATATYPE_INITIALIZER_FLOAT8(FLAGS) OPAL_DATATYPE_INITIALIZER_UNAVAILABLE_NAMED( FLOAT8, FLAGS )
@ -381,7 +381,7 @@ struct opal_datatype_t;
#define OPAL_DATATYPE_INITIALIZER_FLOAT12(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( float, OPAL_ALIGNMENT_FLOAT, FLOAT12, FLAGS )
#elif SIZEOF_DOUBLE == 12
#define OPAL_DATATYPE_INITIALIZER_FLOAT12(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( double, OPAL_ALIGNMENT_DOUBLE, FLOAT12, FLAGS )
#elif SIZEOF_LONG_DOUBLE == 12
#elif HAVE_LONG_DOUBLE && SIZEOF_LONG_DOUBLE == 12
#define OPAL_DATATYPE_INITIALIZER_FLOAT12(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( long double, OPAL_ALIGNMENT_LONG_DOUBLE, FLOAT12, FLAGS )
#else
#define OPAL_DATATYPE_INITIALIZER_FLOAT12(FLAGS) OPAL_DATATYPE_INITIALIZER_UNAVAILABLE_NAMED( FLOAT12, FLAGS )
@ -391,7 +391,7 @@ struct opal_datatype_t;
#define OPAL_DATATYPE_INITIALIZER_FLOAT16(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( float, OPAL_ALIGNMENT_FLOAT, FLOAT16, FLAGS )
#elif SIZEOF_DOUBLE == 16
#define OPAL_DATATYPE_INITIALIZER_FLOAT16(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( double, OPAL_ALIGNMENT_DOUBLE, FLOAT16, FLAGS )
#elif SIZEOF_LONG_DOUBLE == 16
#elif HAVE_LONG_DOUBLE && SIZEOF_LONG_DOUBLE == 16
#define OPAL_DATATYPE_INITIALIZER_FLOAT16(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( long double, OPAL_ALIGNMENT_LONG_DOUBLE, FLOAT16, FLAGS )
#else
#define OPAL_DATATYPE_INITIALIZER_FLOAT16(FLAGS) OPAL_DATATYPE_INITIALIZER_UNAVAILABLE_NAMED( FLOAT16, FLAGS )