This commit should fix the issues with ticket 1065. Now, we correctly
duplicate the MPI_UB and MPI_LB datatypes. This commit was SVN r16083.
Этот коммит содержится в:
родитель
45767b038c
Коммит
8622beda54
@ -89,7 +89,7 @@ int32_t ompi_ddt_add( ompi_datatype_t* pdtBase, const ompi_datatype_t* pdtAdd,
|
||||
|
||||
if( pdtAdd->flags & DT_FLAG_PREDEFINED ) { /* add a basic datatype */
|
||||
/* handle special cases for DT_LB and DT_UB */
|
||||
if( pdtAdd == ompi_ddt_basicDatatypes[DT_LB] ) {
|
||||
if( DT_LB == pdtAdd->id ) {
|
||||
pdtBase->bdt_used |= (((uint64_t)1) << DT_LB);
|
||||
if( pdtBase->flags & DT_FLAG_USER_LB ) {
|
||||
pdtBase->lb = LMIN( pdtBase->lb, disp );
|
||||
@ -101,7 +101,7 @@ int32_t ompi_ddt_add( ompi_datatype_t* pdtBase, const ompi_datatype_t* pdtAdd,
|
||||
pdtBase->flags &= ~DT_FLAG_NO_GAPS;
|
||||
}
|
||||
return OMPI_SUCCESS;
|
||||
} else if( pdtAdd == ompi_ddt_basicDatatypes[DT_UB] ) {
|
||||
} else if( DT_UB == pdtAdd->id ) {
|
||||
pdtBase->bdt_used |= (((uint64_t)1) << DT_UB);
|
||||
if( pdtBase->flags & DT_FLAG_USER_UB ) {
|
||||
pdtBase->ub = LMAX( pdtBase->ub, disp );
|
||||
@ -199,6 +199,8 @@ int32_t ompi_ddt_add( ompi_datatype_t* pdtBase, const ompi_datatype_t* pdtAdd,
|
||||
pdtBase->ub += (pdtBase->align - epsilon);
|
||||
}
|
||||
}
|
||||
/* now we know it contain some data */
|
||||
pdtBase->flags |= DT_FLAG_DATA;
|
||||
|
||||
/*
|
||||
* the count == 0 is LEGAL only for MPI_UB and MPI_LB. Therefore we support it
|
||||
|
@ -60,7 +60,8 @@ int32_t ompi_ddt_duplicate( const ompi_datatype_t* oldType, ompi_datatype_t** ne
|
||||
memcpy( pdt->opt_desc.desc, oldType->opt_desc.desc, desc_length * sizeof(dt_elem_desc_t) );
|
||||
}
|
||||
}
|
||||
pdt->id = 0;
|
||||
pdt->id = oldType->id; /* preserve the default id. This allow us to
|
||||
* copy predefined types. */
|
||||
pdt->args = NULL;
|
||||
*newType = pdt;
|
||||
return OMPI_SUCCESS;
|
||||
|
@ -47,15 +47,6 @@ int MPI_Type_dup (MPI_Datatype type,
|
||||
}
|
||||
}
|
||||
|
||||
/* Don't allow for UB and LB duplication. Instead return the same
|
||||
* pointer and increase the reference count by one.
|
||||
*/
|
||||
if( (MPI_UB == type) || (MPI_LB == type) ) {
|
||||
OBJ_RETAIN( type );
|
||||
*newtype = type;
|
||||
return OMPI_SUCCESS;
|
||||
}
|
||||
|
||||
if (OMPI_SUCCESS != ompi_ddt_duplicate( type, newtype)) {
|
||||
ompi_ddt_destroy( newtype );
|
||||
OMPI_ERRHANDLER_RETURN (MPI_ERR_INTERN, MPI_COMM_WORLD,
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user