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.
Этот коммит содержится в:
родитель
dc9370598f
Коммит
33e7cc864c
63
ompi/op/op.c
63
ompi/op/op.c
@ -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 */
|
||||||
|
|
||||||
|
12
ompi/op/op.h
12
ompi/op/op.h
@ -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
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user