Add support for MPI_OP_SUM, PROD, REPLACE with MPI_DOUBLE_COMPLEX.
Need to consult with George -- might also need to add support for complex types on floats or long doubles... This commit was SVN r7716.
Этот коммит содержится в:
родитель
0f08e87a1f
Коммит
c568936a7c
12
ompi/op/op.c
12
ompi/op/op.c
@ -187,9 +187,13 @@ OBJ_CLASS_INSTANCE(ompi_op_t, opal_object_t,
|
||||
/** Fortran complex *****************************************************/
|
||||
|
||||
#if OMPI_HAVE_FORTRAN_REAL && OMPI_HAVE_FORTRAN_COMPLEX
|
||||
#define COMPLEX_PLAIN(name) { ompi_mpi_op_##name##_fortran_complex }
|
||||
#define COMPLEX_PLAIN(name) \
|
||||
{ ompi_mpi_op_##name##_fortran_complex }, \
|
||||
{ ompi_mpi_op_##name##_fortran_double_complex }
|
||||
#else
|
||||
#define COMPLEX_PLAIN(name) { NULL }
|
||||
#define COMPLEX_PLAIN(name) \
|
||||
{ NULL }, \
|
||||
{ NULL }
|
||||
#endif
|
||||
#if OMPI_HAVE_FORTRAN_REAL4 && OMPI_HAVE_FORTRAN_COMPLEX8
|
||||
#define COMPLEX8(name) { ompi_mpi_op_##name##_fortran_complex8 }
|
||||
@ -213,7 +217,8 @@ OBJ_CLASS_INSTANCE(ompi_op_t, opal_object_t,
|
||||
COMPLEX16(name), /* OMPI_OP_TYPE_COMPLEX16 */ \
|
||||
COMPLEX32(name) /* OMPI_OP_TYPE_COMPLEX32 */
|
||||
#define COMPLEX_NULL \
|
||||
{ NULL }, /* OMPI_OP_TYPE_COMPLEX */ \
|
||||
{ NULL }, /* OMPI_OP_TYPE_COMPLEX (single) */ \
|
||||
{ NULL }, /* OMPI_OP_TYPE_COMPLEX (double) */ \
|
||||
{ NULL }, /* OMPI_OP_TYPE_COMPLEX8 */ \
|
||||
{ NULL }, /* OMPI_OP_TYPE_COMPLEX16 */ \
|
||||
{ NULL } /* OMPI_OP_TYPE_COMPLEX32 */
|
||||
@ -562,6 +567,7 @@ int ompi_op_init(void)
|
||||
ompi_op_ddt_map[DT_DOUBLE] = OMPI_OP_TYPE_DOUBLE;
|
||||
ompi_op_ddt_map[DT_LONG_DOUBLE] = OMPI_OP_TYPE_LONG_DOUBLE;
|
||||
ompi_op_ddt_map[DT_COMPLEX_FLOAT] = OMPI_OP_TYPE_COMPLEX;
|
||||
ompi_op_ddt_map[DT_COMPLEX_DOUBLE] = OMPI_OP_TYPE_DOUBLE_COMPLEX;
|
||||
ompi_op_ddt_map[DT_LOGIC] = OMPI_OP_TYPE_LOGICAL;
|
||||
ompi_op_ddt_map[DT_FLOAT_INT] = OMPI_OP_TYPE_FLOAT_INT;
|
||||
ompi_op_ddt_map[DT_DOUBLE_INT] = OMPI_OP_TYPE_DOUBLE_INT;
|
||||
|
@ -122,6 +122,8 @@ enum {
|
||||
|
||||
OMPI_OP_TYPE_COMPLEX,
|
||||
/**< Complex */
|
||||
OMPI_OP_TYPE_DOUBLE_COMPLEX,
|
||||
/**< Double complex */
|
||||
OMPI_OP_TYPE_COMPLEX8,
|
||||
/**< Complex8 */
|
||||
OMPI_OP_TYPE_COMPLEX16,
|
||||
|
@ -295,6 +295,7 @@ OP_FUNC(sum, fortran_real16, ompi_fortran_real16_t, +=)
|
||||
/* Complex */
|
||||
#if OMPI_HAVE_FORTRAN_REAL && OMPI_HAVE_FORTRAN_COMPLEX
|
||||
COMPLEX_OP_FUNC_SUM(fortran_complex, ompi_fortran_complex_t)
|
||||
COMPLEX_OP_FUNC_SUM(fortran_double_complex, ompi_fortran_double_complex_t)
|
||||
#endif
|
||||
#if OMPI_HAVE_FORTRAN_REAL4 && OMPI_HAVE_FORTRAN_COMPLEX8
|
||||
COMPLEX_OP_FUNC_SUM(fortran_complex8, ompi_fortran_complex8_t)
|
||||
@ -363,6 +364,7 @@ OP_FUNC(prod, fortran_real16, ompi_fortran_real16_t, +=)
|
||||
/* Complex */
|
||||
#if OMPI_HAVE_FORTRAN_REAL && OMPI_HAVE_FORTRAN_COMPLEX
|
||||
COMPLEX_OP_FUNC_PROD(fortran_complex, ompi_fortran_complex_t)
|
||||
COMPLEX_OP_FUNC_PROD(fortran_double_complex, ompi_fortran_double_complex_t)
|
||||
#endif
|
||||
#if OMPI_HAVE_FORTRAN_REAL4 && OMPI_HAVE_FORTRAN_COMPLEX8
|
||||
COMPLEX_OP_FUNC_PROD(fortran_complex8, ompi_fortran_complex8_t)
|
||||
@ -675,6 +677,7 @@ OP_FUNC(replace, long_double, long double, =)
|
||||
/* Complex */
|
||||
#if OMPI_HAVE_FORTRAN_REAL && OMPI_HAVE_FORTRAN_COMPLEX
|
||||
OP_FUNC(replace, fortran_complex, ompi_fortran_complex_t, =)
|
||||
OP_FUNC(replace, fortran_double_complex, ompi_fortran_double_complex_t, =)
|
||||
#endif
|
||||
#if OMPI_HAVE_FORTRAN_REAL4 && OMPI_HAVE_FORTRAN_COMPLEX8
|
||||
OP_FUNC(replace, fortran_complex8, ompi_fortran_complex8_t, =)
|
||||
|
@ -128,7 +128,8 @@
|
||||
/* Complex */
|
||||
|
||||
#define OMPI_OP_HANDLER_COMPLEX_INTRINSIC(name) \
|
||||
void ompi_mpi_op_##name##_fortran_complex OMPI_OP_PROTO;
|
||||
void ompi_mpi_op_##name##_fortran_complex OMPI_OP_PROTO; \
|
||||
void ompi_mpi_op_##name##_fortran_double_complex OMPI_OP_PROTO;
|
||||
#if OMPI_HAVE_FORTRAN_REAL4
|
||||
#define OMPI_OP_HANDLER_COMPLEX8(name) \
|
||||
void ompi_mpi_op_##name##_fortran_complex8 OMPI_OP_PROTO;
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user