1
1

The ops should be indexed based on the MPI datatype index (which is

actually the same as the Fortran value of the MPI type).

This commit was SVN r21689.
Этот коммит содержится в:
George Bosilca 2009-07-15 21:30:09 +00:00
родитель dc9370598f
Коммит 33e7cc864c
2 изменённых файлов: 40 добавлений и 41 удалений

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

@ -106,38 +106,37 @@ int ompi_op_init(void)
ompi_op_ddt_map[i] = -1; ompi_op_ddt_map[i] = -1;
} }
/* XXX TODO */ ompi_op_ddt_map[OMPI_DATATYPE_MPI_UNSIGNED_CHAR] = OMPI_OP_BASE_TYPE_UNSIGNED_CHAR;
ompi_op_ddt_map[OMPI_DATATYPE_UNSIGNED_CHAR] = OMPI_OP_BASE_TYPE_UNSIGNED_CHAR; ompi_op_ddt_map[OMPI_DATATYPE_MPI_SIGNED_CHAR] = OMPI_OP_BASE_TYPE_SIGNED_CHAR;
ompi_op_ddt_map[OMPI_DATATYPE_SIGNED_CHAR] = OMPI_OP_BASE_TYPE_SIGNED_CHAR; ompi_op_ddt_map[OMPI_DATATYPE_MPI_BYTE] = OMPI_OP_BASE_TYPE_BYTE;
ompi_op_ddt_map[OMPI_DATATYPE_BYTE] = OMPI_OP_BASE_TYPE_BYTE; ompi_op_ddt_map[OMPI_DATATYPE_MPI_SHORT] = OMPI_OP_BASE_TYPE_SHORT;
ompi_op_ddt_map[OMPI_DATATYPE_SHORT] = OMPI_OP_BASE_TYPE_SHORT; ompi_op_ddt_map[OMPI_DATATYPE_MPI_UNSIGNED_SHORT] = OMPI_OP_BASE_TYPE_UNSIGNED_SHORT;
ompi_op_ddt_map[OMPI_DATATYPE_UNSIGNED_SHORT] = OMPI_OP_BASE_TYPE_UNSIGNED_SHORT; ompi_op_ddt_map[OMPI_DATATYPE_MPI_INT] = OMPI_OP_BASE_TYPE_INT;
ompi_op_ddt_map[OMPI_DATATYPE_INT] = OMPI_OP_BASE_TYPE_INT; ompi_op_ddt_map[OMPI_DATATYPE_MPI_UNSIGNED_INT] = OMPI_OP_BASE_TYPE_UNSIGNED;
ompi_op_ddt_map[OMPI_DATATYPE_UNSIGNED_INT] = OMPI_OP_BASE_TYPE_UNSIGNED; ompi_op_ddt_map[OMPI_DATATYPE_MPI_LONG] = OMPI_OP_BASE_TYPE_LONG;
ompi_op_ddt_map[OMPI_DATATYPE_LONG] = OMPI_OP_BASE_TYPE_LONG; ompi_op_ddt_map[OMPI_DATATYPE_MPI_UNSIGNED_LONG] = OMPI_OP_BASE_TYPE_UNSIGNED_LONG;
ompi_op_ddt_map[OMPI_DATATYPE_UNSIGNED_LONG] = OMPI_OP_BASE_TYPE_UNSIGNED_LONG; ompi_op_ddt_map[OMPI_DATATYPE_MPI_LONG_LONG] = OMPI_OP_BASE_TYPE_LONG_LONG_INT;
ompi_op_ddt_map[OMPI_DATATYPE_LONG_LONG] = OMPI_OP_BASE_TYPE_LONG_LONG_INT; ompi_op_ddt_map[OMPI_DATATYPE_MPI_UNSIGNED_LONG_LONG] = OMPI_OP_BASE_TYPE_UNSIGNED_LONG_LONG;
ompi_op_ddt_map[OMPI_DATATYPE_UNSIGNED_LONG_LONG] = OMPI_OP_BASE_TYPE_UNSIGNED_LONG_LONG; ompi_op_ddt_map[OMPI_DATATYPE_MPI_FLOAT] = OMPI_OP_BASE_TYPE_FLOAT;
ompi_op_ddt_map[OMPI_DATATYPE_FLOAT] = OMPI_OP_BASE_TYPE_FLOAT; ompi_op_ddt_map[OMPI_DATATYPE_MPI_DOUBLE] = OMPI_OP_BASE_TYPE_DOUBLE;
ompi_op_ddt_map[OMPI_DATATYPE_DOUBLE] = OMPI_OP_BASE_TYPE_DOUBLE; ompi_op_ddt_map[OMPI_DATATYPE_MPI_LONG_DOUBLE] = OMPI_OP_BASE_TYPE_LONG_DOUBLE;
ompi_op_ddt_map[OMPI_DATATYPE_LONG_DOUBLE] = OMPI_OP_BASE_TYPE_LONG_DOUBLE; ompi_op_ddt_map[OMPI_DATATYPE_MPI_COMPLEX] = OMPI_OP_BASE_TYPE_COMPLEX;
ompi_op_ddt_map[OMPI_DATATYPE_COMPLEX] = OMPI_OP_BASE_TYPE_COMPLEX; ompi_op_ddt_map[OMPI_DATATYPE_MPI_DOUBLE_COMPLEX] = OMPI_OP_BASE_TYPE_DOUBLE_COMPLEX;
ompi_op_ddt_map[OMPI_DATATYPE_DOUBLE_COMPLEX] = OMPI_OP_BASE_TYPE_DOUBLE_COMPLEX; ompi_op_ddt_map[OMPI_DATATYPE_MPI_LOGICAL] = OMPI_OP_BASE_TYPE_LOGICAL;
ompi_op_ddt_map[OMPI_DATATYPE_LOGICAL] = OMPI_OP_BASE_TYPE_LOGICAL; ompi_op_ddt_map[OMPI_DATATYPE_MPI_BOOL] = OMPI_OP_BASE_TYPE_BOOL;
ompi_op_ddt_map[OMPI_DATATYPE_BOOL] = OMPI_OP_BASE_TYPE_BOOL; ompi_op_ddt_map[OMPI_DATATYPE_MPI_FLOAT_INT] = OMPI_OP_BASE_TYPE_FLOAT_INT;
ompi_op_ddt_map[OMPI_DATATYPE_FLOAT_INT] = OMPI_OP_BASE_TYPE_FLOAT_INT; ompi_op_ddt_map[OMPI_DATATYPE_MPI_DOUBLE_INT] = OMPI_OP_BASE_TYPE_DOUBLE_INT;
ompi_op_ddt_map[OMPI_DATATYPE_DOUBLE_INT] = OMPI_OP_BASE_TYPE_DOUBLE_INT; ompi_op_ddt_map[OMPI_DATATYPE_MPI_LONG_INT] = OMPI_OP_BASE_TYPE_LONG_INT;
ompi_op_ddt_map[OMPI_DATATYPE_LONG_INT] = OMPI_OP_BASE_TYPE_LONG_INT; ompi_op_ddt_map[OMPI_DATATYPE_MPI_2INT] = OMPI_OP_BASE_TYPE_2INT;
ompi_op_ddt_map[OMPI_DATATYPE_2INT] = OMPI_OP_BASE_TYPE_2INT; ompi_op_ddt_map[OMPI_DATATYPE_MPI_SHORT_INT] = OMPI_OP_BASE_TYPE_SHORT_INT;
ompi_op_ddt_map[OMPI_DATATYPE_SHORT_INT] = OMPI_OP_BASE_TYPE_SHORT_INT; ompi_op_ddt_map[OMPI_DATATYPE_MPI_INTEGER] = OMPI_OP_BASE_TYPE_INTEGER;
ompi_op_ddt_map[OMPI_DATATYPE_INTEGER] = OMPI_OP_BASE_TYPE_INTEGER; ompi_op_ddt_map[OMPI_DATATYPE_MPI_REAL] = OMPI_OP_BASE_TYPE_REAL;
ompi_op_ddt_map[OMPI_DATATYPE_REAL] = OMPI_OP_BASE_TYPE_REAL; ompi_op_ddt_map[OMPI_DATATYPE_MPI_DOUBLE_PRECISION] = OMPI_OP_BASE_TYPE_DOUBLE_PRECISION;
ompi_op_ddt_map[OMPI_DATATYPE_DOUBLE_PRECISION] = OMPI_OP_BASE_TYPE_DOUBLE_PRECISION; ompi_op_ddt_map[OMPI_DATATYPE_MPI_2REAL] = OMPI_OP_BASE_TYPE_2REAL;
ompi_op_ddt_map[OMPI_DATATYPE_2REAL] = OMPI_OP_BASE_TYPE_2REAL; ompi_op_ddt_map[OMPI_DATATYPE_MPI_2DBLPREC] = OMPI_OP_BASE_TYPE_2DOUBLE_PRECISION;
ompi_op_ddt_map[OMPI_DATATYPE_2DBLPREC] = OMPI_OP_BASE_TYPE_2DOUBLE_PRECISION; ompi_op_ddt_map[OMPI_DATATYPE_MPI_2INTEGER] = OMPI_OP_BASE_TYPE_2INTEGER;
ompi_op_ddt_map[OMPI_DATATYPE_2INTEGER] = OMPI_OP_BASE_TYPE_2INTEGER; ompi_op_ddt_map[OMPI_DATATYPE_MPI_LONG_DOUBLE_INT] = OMPI_OP_BASE_TYPE_LONG_DOUBLE_INT;
ompi_op_ddt_map[OMPI_DATATYPE_LONG_DOUBLE_INT] = OMPI_OP_BASE_TYPE_LONG_DOUBLE_INT; ompi_op_ddt_map[OMPI_DATATYPE_MPI_WCHAR] = OMPI_OP_BASE_TYPE_WCHAR;
ompi_op_ddt_map[OMPI_DATATYPE_WCHAR] = OMPI_OP_BASE_TYPE_WCHAR;
/* Create the intrinsic ops */ /* Create the intrinsic ops */

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

@ -407,8 +407,8 @@ static inline bool ompi_op_is_valid(ompi_op_t * op, ompi_datatype_t * ddt,
if (ompi_op_is_intrinsic(op)) { if (ompi_op_is_intrinsic(op)) {
if (ompi_datatype_is_predefined(ddt)) { if (ompi_datatype_is_predefined(ddt)) {
/* Intrinsic ddt on intrinsic op */ /* Intrinsic ddt on intrinsic op */
if (-1 == ompi_op_ddt_map[ddt->super.id] || if (-1 == ompi_op_ddt_map[ddt->id] ||
NULL == op->o_func.intrinsic.fns[ompi_op_ddt_map[ddt->super.id]]) { NULL == op->o_func.intrinsic.fns[ompi_op_ddt_map[ddt->id]]) {
asprintf(msg, asprintf(msg,
"%s: the reduction operation %s is not defined on the %s datatype", "%s: the reduction operation %s is not defined on the %s datatype",
func, op->o_name, ddt->name); func, op->o_name, ddt->name);
@ -495,9 +495,9 @@ static inline void ompi_op_reduce(ompi_op_t * op, void *source,
/* For intrinsics, we also pass the corresponding op module */ /* For intrinsics, we also pass the corresponding op module */
if (0 != (op->o_flags & OMPI_OP_FLAGS_INTRINSIC)) { if (0 != (op->o_flags & OMPI_OP_FLAGS_INTRINSIC)) {
op->o_func.intrinsic.fns[ompi_op_ddt_map[dtype->super.id]](source, target, op->o_func.intrinsic.fns[ompi_op_ddt_map[dtype->id]](source, target,
&count, &dtype, &count, &dtype,
op->o_func.intrinsic.modules[ompi_op_ddt_map[dtype->super.id]]); op->o_func.intrinsic.modules[ompi_op_ddt_map[dtype->id]]);
} }
/* User-defined function */ /* User-defined function */
@ -548,10 +548,10 @@ static inline void ompi_3buff_op_reduce(ompi_op_t * op, void *source1,
src2 = source2; src2 = source2;
tgt = target; tgt = target;
op->o_3buff_intrinsic.fns[ompi_op_ddt_map[dtype->super.id]](src1, src2, op->o_3buff_intrinsic.fns[ompi_op_ddt_map[dtype->id]](src1, src2,
tgt, &count, tgt, &count,
&dtype, &dtype,
op->o_3buff_intrinsic.modules[ompi_op_ddt_map[dtype->super.id]]); op->o_3buff_intrinsic.modules[ompi_op_ddt_map[dtype->id]]);
} }
END_C_DECLS END_C_DECLS