Esempio n. 1
0
/*
 * Initialize OMPI op infrastructure
 */
int ompi_op_init(void)
{
    int i;

    /* initialize ompi_op_f_to_c_table */

    ompi_op_f_to_c_table = OBJ_NEW(opal_pointer_array_t);
    if (NULL == ompi_op_f_to_c_table) {
        return OMPI_ERROR;
    }

    /* Fill in the ddt.id->op_position map */

    for (i = 0; i < OMPI_DATATYPE_MAX_PREDEFINED; ++i) {
        ompi_op_ddt_map[i] = -1;
    }

    ompi_op_ddt_map[OMPI_DATATYPE_MPI_INT8_T] = OMPI_OP_BASE_TYPE_INT8_T;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_UINT8_T] = OMPI_OP_BASE_TYPE_UINT8_T;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_INT16_T] = OMPI_OP_BASE_TYPE_INT16_T;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_UINT16_T] = OMPI_OP_BASE_TYPE_UINT16_T;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_INT32_T] = OMPI_OP_BASE_TYPE_INT32_T;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_UINT32_T] = OMPI_OP_BASE_TYPE_UINT32_T;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_INT64_T] = OMPI_OP_BASE_TYPE_INT64_T;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_UINT64_T] = OMPI_OP_BASE_TYPE_UINT64_T;

    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;
#if OMPI_SIZEOF_FORTRAN_COMPLEX8 == SIZEOF_FLOAT__COMPLEX
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_COMPLEX8] = OMPI_OP_BASE_TYPE_COMPLEX8;
#endif
#if OMPI_SIZEOF_FORTRAN_COMPLEX16 == SIZEOF_DOUBLE__COMPLEX
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_COMPLEX16] = OMPI_OP_BASE_TYPE_COMPLEX16;
#endif
#if OMPI_SIZEOF_FORTRAN_COMPLEX32 == SIZEOF_LONG_DOUBLE__COMPLEX
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_COMPLEX32] = OMPI_OP_BASE_TYPE_COMPLEX32;
#endif
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_WCHAR] = OMPI_OP_BASE_TYPE_WCHAR;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_BOOL] = OMPI_OP_BASE_TYPE_BOOL;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_LOGICAL] = OMPI_OP_BASE_TYPE_LOGICAL;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_CHARACTER] = OMPI_OP_BASE_TYPE_UINT8_T;
    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_COMPLEX] = OMPI_OP_BASE_TYPE_COMPLEX8;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_DOUBLE_COMPLEX] = OMPI_OP_BASE_TYPE_COMPLEX16;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_LONG_DOUBLE_COMPLEX] = OMPI_OP_BASE_TYPE_COMPLEX32;

    ompi_op_ddt_map[OMPI_DATATYPE_MPI_2INT] = OMPI_OP_BASE_TYPE_2INT;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_2INTEGER] = OMPI_OP_BASE_TYPE_2INTEGER;
    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_2COMPLEX] = -1;         /* Not defined */
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_2DOUBLE_COMPLEX] = -1;  /* Not defined */

    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_DOUBLE_INT] = OMPI_OP_BASE_TYPE_LONG_DOUBLE_INT;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_LONG_INT] = OMPI_OP_BASE_TYPE_LONG_INT;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_SHORT_INT] = OMPI_OP_BASE_TYPE_SHORT_INT;

#if SIZEOF_PTRDIFF_T == 4
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_AINT] = OMPI_OP_BASE_TYPE_INT32_T;
#elif SIZEOF_PTRDIFF_T == 8
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_AINT] = OMPI_OP_BASE_TYPE_INT64_T;
#else
#warning Unsupported definition for MPI_AINT
#endif
#if OMPI_MPI_OFFSET_SIZE == 4
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_OFFSET] = OMPI_OP_BASE_TYPE_UINT32_T;
#elif OMPI_MPI_OFFSET_SIZE == 8
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_OFFSET] = OMPI_OP_BASE_TYPE_UINT64_T;
#else
#warning Unsupported definition for MPI_OFFSET
#endif
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_C_BOOL] = OMPI_OP_BASE_TYPE_BOOL;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_C_COMPLEX] = OMPI_OP_BASE_TYPE_COMPLEX8;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_C_FLOAT_COMPLEX] = OMPI_OP_BASE_TYPE_COMPLEX8;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_C_DOUBLE_COMPLEX] = OMPI_OP_BASE_TYPE_COMPLEX16;
    ompi_op_ddt_map[OMPI_DATATYPE_MPI_C_LONG_DOUBLE_COMPLEX] = OMPI_OP_BASE_TYPE_COMPLEX32;

    /* Create the intrinsic ops */

    if (OMPI_SUCCESS !=
            add_intrinsic(&ompi_mpi_op_null.op, OMPI_OP_BASE_FORTRAN_NULL,
                          FLAGS, "MPI_NULL") ||
            OMPI_SUCCESS !=
            add_intrinsic(&ompi_mpi_op_max.op, OMPI_OP_BASE_FORTRAN_MAX,
                          FLAGS, "MPI_MAX") ||
            OMPI_SUCCESS !=
            add_intrinsic(&ompi_mpi_op_min.op, OMPI_OP_BASE_FORTRAN_MIN,
                          FLAGS, "MPI_MIN") ||
            OMPI_SUCCESS !=
            add_intrinsic(&ompi_mpi_op_sum.op, OMPI_OP_BASE_FORTRAN_SUM,
                          FLAGS_NO_FLOAT, "MPI_SUM") ||
            OMPI_SUCCESS !=
            add_intrinsic(&ompi_mpi_op_prod.op, OMPI_OP_BASE_FORTRAN_PROD,
                          FLAGS_NO_FLOAT, "MPI_PROD") ||
            OMPI_SUCCESS !=
            add_intrinsic(&ompi_mpi_op_land.op, OMPI_OP_BASE_FORTRAN_LAND,
                          FLAGS, "MPI_LAND") ||
            OMPI_SUCCESS !=
            add_intrinsic(&ompi_mpi_op_band.op, OMPI_OP_BASE_FORTRAN_BAND,
                          FLAGS, "MPI_BAND") ||
            OMPI_SUCCESS !=
            add_intrinsic(&ompi_mpi_op_lor.op, OMPI_OP_BASE_FORTRAN_LOR,
                          FLAGS, "MPI_LOR") ||
            OMPI_SUCCESS !=
            add_intrinsic(&ompi_mpi_op_bor.op, OMPI_OP_BASE_FORTRAN_BOR,
                          FLAGS, "MPI_BOR") ||
            OMPI_SUCCESS !=
            add_intrinsic(&ompi_mpi_op_lxor.op, OMPI_OP_BASE_FORTRAN_LXOR,
                          FLAGS, "MPI_LXOR") ||
            OMPI_SUCCESS !=
            add_intrinsic(&ompi_mpi_op_bxor.op, OMPI_OP_BASE_FORTRAN_BXOR,
                          FLAGS, "MPI_BXOR") ||
            OMPI_SUCCESS !=
            add_intrinsic(&ompi_mpi_op_maxloc.op, OMPI_OP_BASE_FORTRAN_MAXLOC,
                          FLAGS, "MPI_MAXLOC") ||
            OMPI_SUCCESS !=
            add_intrinsic(&ompi_mpi_op_minloc.op, OMPI_OP_BASE_FORTRAN_MINLOC,
                          FLAGS, "MPI_MINLOC") ||
            OMPI_SUCCESS !=
            add_intrinsic(&ompi_mpi_op_replace.op, OMPI_OP_BASE_FORTRAN_REPLACE,
                          FLAGS, "MPI_REPLACE")) {
        return OMPI_ERROR;
    }

    /* All done */
    return OMPI_SUCCESS;
}
Esempio n. 2
0
/*
 * Initialize OMPI op infrastructure
 */
int ompi_op_init(void)
{
    int i;

  /* initialize ompi_op_f_to_c_table */

    ompi_op_f_to_c_table = OBJ_NEW(opal_pointer_array_t);
    if (NULL == ompi_op_f_to_c_table){
        return OMPI_ERROR;
    }

    /* Fill in the ddt.id->op_position map */

    for (i = 0; i < DT_MAX_PREDEFINED; ++i) {
        ompi_op_ddt_map[i] = -1;
    }

    ompi_op_ddt_map[DT_UNSIGNED_CHAR] = OMPI_OP_TYPE_UNSIGNED_CHAR;
    ompi_op_ddt_map[DT_SIGNED_CHAR] = OMPI_OP_TYPE_SIGNED_CHAR;
    ompi_op_ddt_map[DT_BYTE] = OMPI_OP_TYPE_BYTE;
    ompi_op_ddt_map[DT_SHORT] = OMPI_OP_TYPE_SHORT;
    ompi_op_ddt_map[DT_UNSIGNED_SHORT] = OMPI_OP_TYPE_UNSIGNED_SHORT;
    ompi_op_ddt_map[DT_INT] = OMPI_OP_TYPE_INT;
    ompi_op_ddt_map[DT_UNSIGNED_INT] = OMPI_OP_TYPE_UNSIGNED;
    ompi_op_ddt_map[DT_LONG] = OMPI_OP_TYPE_LONG;
    ompi_op_ddt_map[DT_UNSIGNED_LONG] = OMPI_OP_TYPE_UNSIGNED_LONG;
    ompi_op_ddt_map[DT_LONG_LONG_INT] = OMPI_OP_TYPE_LONG_LONG_INT;
    ompi_op_ddt_map[DT_UNSIGNED_LONG_LONG] = OMPI_OP_TYPE_UNSIGNED_LONG_LONG;
    ompi_op_ddt_map[DT_FLOAT] = OMPI_OP_TYPE_FLOAT;
    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_CXX_BOOL] = OMPI_OP_TYPE_BOOL;
    ompi_op_ddt_map[DT_FLOAT_INT] = OMPI_OP_TYPE_FLOAT_INT;
    ompi_op_ddt_map[DT_DOUBLE_INT] = OMPI_OP_TYPE_DOUBLE_INT;
    ompi_op_ddt_map[DT_LONG_INT] = OMPI_OP_TYPE_LONG_INT;
    ompi_op_ddt_map[DT_2INT] = OMPI_OP_TYPE_2INT;
    ompi_op_ddt_map[DT_SHORT_INT] = OMPI_OP_TYPE_SHORT_INT;
    ompi_op_ddt_map[DT_INTEGER] = OMPI_OP_TYPE_INTEGER;
    ompi_op_ddt_map[DT_REAL] = OMPI_OP_TYPE_REAL;
    ompi_op_ddt_map[DT_DBLPREC] = OMPI_OP_TYPE_DOUBLE_PRECISION;
    ompi_op_ddt_map[DT_2REAL] = OMPI_OP_TYPE_2REAL;
    ompi_op_ddt_map[DT_2DBLPREC] = OMPI_OP_TYPE_2DOUBLE_PRECISION;
    ompi_op_ddt_map[DT_2INTEGER] = OMPI_OP_TYPE_2INTEGER;
    ompi_op_ddt_map[DT_LONG_DOUBLE_INT] = OMPI_OP_TYPE_LONG_DOUBLE_INT;
    ompi_op_ddt_map[DT_WCHAR] = OMPI_OP_TYPE_WCHAR;

    /* Create the intrinsic ops */

    if (add_intrinsic(&ompi_mpi_op_null.op, OMPI_OP_FORTRAN_NULL) != OMPI_SUCCESS ||
        add_intrinsic(&ompi_mpi_op_max.op, OMPI_OP_FORTRAN_MAX) != OMPI_SUCCESS ||
        add_intrinsic(&ompi_mpi_op_min.op, OMPI_OP_FORTRAN_MIN) != OMPI_SUCCESS ||
        add_intrinsic(&ompi_mpi_op_sum.op, OMPI_OP_FORTRAN_SUM) != OMPI_SUCCESS ||
        add_intrinsic(&ompi_mpi_op_prod.op, OMPI_OP_FORTRAN_PROD) != OMPI_SUCCESS ||
        add_intrinsic(&ompi_mpi_op_land.op, OMPI_OP_FORTRAN_LAND) != OMPI_SUCCESS ||
        add_intrinsic(&ompi_mpi_op_band.op, OMPI_OP_FORTRAN_BAND) != OMPI_SUCCESS ||
        add_intrinsic(&ompi_mpi_op_lor.op, OMPI_OP_FORTRAN_LOR) != OMPI_SUCCESS ||
        add_intrinsic(&ompi_mpi_op_bor.op, OMPI_OP_FORTRAN_BOR) != OMPI_SUCCESS ||
        add_intrinsic(&ompi_mpi_op_lxor.op, OMPI_OP_FORTRAN_LXOR) != OMPI_SUCCESS ||
        add_intrinsic(&ompi_mpi_op_bxor.op, OMPI_OP_FORTRAN_BXOR) != OMPI_SUCCESS ||
        add_intrinsic(&ompi_mpi_op_maxloc.op, 
                      OMPI_OP_FORTRAN_MAXLOC) != OMPI_SUCCESS ||
        add_intrinsic(&ompi_mpi_op_minloc.op, 
                    OMPI_OP_FORTRAN_MINLOC) != OMPI_SUCCESS ||
        add_intrinsic(&ompi_mpi_op_replace.op, 
                      OMPI_OP_FORTRAN_REPLACE) != OMPI_SUCCESS) {
        return OMPI_ERROR;
    }

    /* All done */
    return OMPI_SUCCESS;
}