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;
}
/* XXX TODO */
ompi_op_ddt_map[OMPI_DATATYPE_UNSIGNED_CHAR] = OMPI_OP_BASE_TYPE_UNSIGNED_CHAR;
ompi_op_ddt_map[OMPI_DATATYPE_SIGNED_CHAR] = OMPI_OP_BASE_TYPE_SIGNED_CHAR;
ompi_op_ddt_map[OMPI_DATATYPE_BYTE] = OMPI_OP_BASE_TYPE_BYTE;
ompi_op_ddt_map[OMPI_DATATYPE_SHORT] = OMPI_OP_BASE_TYPE_SHORT;
ompi_op_ddt_map[OMPI_DATATYPE_UNSIGNED_SHORT] = OMPI_OP_BASE_TYPE_UNSIGNED_SHORT;
ompi_op_ddt_map[OMPI_DATATYPE_INT] = OMPI_OP_BASE_TYPE_INT;
ompi_op_ddt_map[OMPI_DATATYPE_UNSIGNED_INT] = OMPI_OP_BASE_TYPE_UNSIGNED;
ompi_op_ddt_map[OMPI_DATATYPE_LONG] = OMPI_OP_BASE_TYPE_LONG;
ompi_op_ddt_map[OMPI_DATATYPE_UNSIGNED_LONG] = OMPI_OP_BASE_TYPE_UNSIGNED_LONG;
ompi_op_ddt_map[OMPI_DATATYPE_LONG_LONG] = OMPI_OP_BASE_TYPE_LONG_LONG_INT;
ompi_op_ddt_map[OMPI_DATATYPE_UNSIGNED_LONG_LONG] = OMPI_OP_BASE_TYPE_UNSIGNED_LONG_LONG;
ompi_op_ddt_map[OMPI_DATATYPE_FLOAT] = OMPI_OP_BASE_TYPE_FLOAT;
ompi_op_ddt_map[OMPI_DATATYPE_DOUBLE] = OMPI_OP_BASE_TYPE_DOUBLE;
ompi_op_ddt_map[OMPI_DATATYPE_LONG_DOUBLE] = OMPI_OP_BASE_TYPE_LONG_DOUBLE;
ompi_op_ddt_map[OMPI_DATATYPE_COMPLEX] = OMPI_OP_BASE_TYPE_COMPLEX;
ompi_op_ddt_map[OMPI_DATATYPE_DOUBLE_COMPLEX] = OMPI_OP_BASE_TYPE_DOUBLE_COMPLEX;
ompi_op_ddt_map[OMPI_DATATYPE_LOGICAL] = OMPI_OP_BASE_TYPE_LOGICAL;
ompi_op_ddt_map[OMPI_DATATYPE_BOOL] = OMPI_OP_BASE_TYPE_BOOL;
ompi_op_ddt_map[OMPI_DATATYPE_FLOAT_INT] = OMPI_OP_BASE_TYPE_FLOAT_INT;
ompi_op_ddt_map[OMPI_DATATYPE_DOUBLE_INT] = OMPI_OP_BASE_TYPE_DOUBLE_INT;
ompi_op_ddt_map[OMPI_DATATYPE_LONG_INT] = OMPI_OP_BASE_TYPE_LONG_INT;
ompi_op_ddt_map[OMPI_DATATYPE_2INT] = OMPI_OP_BASE_TYPE_2INT;
ompi_op_ddt_map[OMPI_DATATYPE_SHORT_INT] = OMPI_OP_BASE_TYPE_SHORT_INT;
ompi_op_ddt_map[OMPI_DATATYPE_INTEGER] = OMPI_OP_BASE_TYPE_INTEGER;
ompi_op_ddt_map[OMPI_DATATYPE_REAL] = OMPI_OP_BASE_TYPE_REAL;
ompi_op_ddt_map[OMPI_DATATYPE_DOUBLE_PRECISION] = OMPI_OP_BASE_TYPE_DOUBLE_PRECISION;
ompi_op_ddt_map[OMPI_DATATYPE_2REAL] = OMPI_OP_BASE_TYPE_2REAL;
ompi_op_ddt_map[OMPI_DATATYPE_2DBLPREC] = OMPI_OP_BASE_TYPE_2DOUBLE_PRECISION;
ompi_op_ddt_map[OMPI_DATATYPE_2INTEGER] = OMPI_OP_BASE_TYPE_2INTEGER;
ompi_op_ddt_map[OMPI_DATATYPE_LONG_DOUBLE_INT] = OMPI_OP_BASE_TYPE_LONG_DOUBLE_INT;
ompi_op_ddt_map[OMPI_DATATYPE_WCHAR] = OMPI_OP_BASE_TYPE_WCHAR;
ompi_op_ddt_map[OMPI_DATATYPE_MPI_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_MPI_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_MPI_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_MPI_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_MPI_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_MPI_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_MPI_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_MPI_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_MPI_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_MPI_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_MPI_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_MPI_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_MPI_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_MPI_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_MPI_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_MPI_WCHAR] = OMPI_OP_BASE_TYPE_WCHAR;
/* 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_datatype_is_predefined(ddt)) {
/* Intrinsic ddt on intrinsic op */
if (-1 == ompi_op_ddt_map[ddt->super.id] ||
NULL == op->o_func.intrinsic.fns[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->id]]) {
asprintf(msg,
"%s: the reduction operation %s is not defined on the %s datatype",
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 */
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,
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 */
@ -548,10 +548,10 @@ static inline void ompi_3buff_op_reduce(ompi_op_t * op, void *source1,
src2 = source2;
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,
&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