Correct the MPI_COMBINER_DUP case when we generate the data description. Now, we have an
optimized version here, where we pack only 2 integers instead of 6. This commit was SVN r9102.
Этот коммит содержится в:
родитель
3ac541a722
Коммит
9dd522e350
@ -85,26 +85,30 @@ int32_t ompi_ddt_set_args( ompi_datatype_t* pData,
|
|||||||
pArgs->create_type = type;
|
pArgs->create_type = type;
|
||||||
|
|
||||||
switch(type){
|
switch(type){
|
||||||
/******************************************************************/
|
|
||||||
case MPI_COMBINER_DUP:
|
case MPI_COMBINER_DUP:
|
||||||
|
/* Recompute the data description packed size based on the optimization
|
||||||
|
* for MPI_COMBINER_DUP.
|
||||||
|
*/
|
||||||
|
pArgs->total_pack_size = 2 * sizeof(int);
|
||||||
break;
|
break;
|
||||||
/******************************************************************/
|
|
||||||
case MPI_COMBINER_CONTIGUOUS:
|
case MPI_COMBINER_CONTIGUOUS:
|
||||||
pArgs->i[0] = i[0][0];
|
pArgs->i[0] = i[0][0];
|
||||||
break;
|
break;
|
||||||
/******************************************************************/
|
|
||||||
case MPI_COMBINER_VECTOR:
|
case MPI_COMBINER_VECTOR:
|
||||||
pArgs->i[0] = i[0][0];
|
pArgs->i[0] = i[0][0];
|
||||||
pArgs->i[1] = i[1][0];
|
pArgs->i[1] = i[1][0];
|
||||||
pArgs->i[2] = i[2][0];
|
pArgs->i[2] = i[2][0];
|
||||||
break;
|
break;
|
||||||
/******************************************************************/
|
|
||||||
case MPI_COMBINER_HVECTOR_INTEGER:
|
case MPI_COMBINER_HVECTOR_INTEGER:
|
||||||
case MPI_COMBINER_HVECTOR:
|
case MPI_COMBINER_HVECTOR:
|
||||||
pArgs->i[0] = i[0][0];
|
pArgs->i[0] = i[0][0];
|
||||||
pArgs->i[1] = i[1][0];
|
pArgs->i[1] = i[1][0];
|
||||||
break;
|
break;
|
||||||
/******************************************************************/
|
|
||||||
case MPI_COMBINER_INDEXED:
|
case MPI_COMBINER_INDEXED:
|
||||||
pos = 1;
|
pos = 1;
|
||||||
pArgs->i[0] = i[0][0];
|
pArgs->i[0] = i[0][0];
|
||||||
@ -112,25 +116,25 @@ int32_t ompi_ddt_set_args( ompi_datatype_t* pData,
|
|||||||
pos += i[0][0];
|
pos += i[0][0];
|
||||||
memcpy( pArgs->i + pos, i[2], i[0][0] * sizeof(int) );
|
memcpy( pArgs->i + pos, i[2], i[0][0] * sizeof(int) );
|
||||||
break;
|
break;
|
||||||
/******************************************************************/
|
|
||||||
case MPI_COMBINER_HINDEXED_INTEGER:
|
case MPI_COMBINER_HINDEXED_INTEGER:
|
||||||
case MPI_COMBINER_HINDEXED:
|
case MPI_COMBINER_HINDEXED:
|
||||||
pArgs->i[0] = i[0][0];
|
pArgs->i[0] = i[0][0];
|
||||||
memcpy( pArgs->i + 1, i[1], i[0][0] * sizeof(int) );
|
memcpy( pArgs->i + 1, i[1], i[0][0] * sizeof(int) );
|
||||||
break;
|
break;
|
||||||
/******************************************************************/
|
|
||||||
case MPI_COMBINER_INDEXED_BLOCK:
|
case MPI_COMBINER_INDEXED_BLOCK:
|
||||||
pArgs->i[0] = i[0][0];
|
pArgs->i[0] = i[0][0];
|
||||||
pArgs->i[1] = i[1][0];
|
pArgs->i[1] = i[1][0];
|
||||||
memcpy( pArgs->i + 2, i[2], i[0][0] * sizeof(int) );
|
memcpy( pArgs->i + 2, i[2], i[0][0] * sizeof(int) );
|
||||||
break;
|
break;
|
||||||
/******************************************************************/
|
|
||||||
case MPI_COMBINER_STRUCT_INTEGER:
|
case MPI_COMBINER_STRUCT_INTEGER:
|
||||||
case MPI_COMBINER_STRUCT:
|
case MPI_COMBINER_STRUCT:
|
||||||
pArgs->i[0] = i[0][0];
|
pArgs->i[0] = i[0][0];
|
||||||
memcpy( pArgs->i + 1, i[1], i[0][0] * sizeof(int) );
|
memcpy( pArgs->i + 1, i[1], i[0][0] * sizeof(int) );
|
||||||
break;
|
break;
|
||||||
/******************************************************************/
|
|
||||||
case MPI_COMBINER_SUBARRAY:
|
case MPI_COMBINER_SUBARRAY:
|
||||||
pos = 1;
|
pos = 1;
|
||||||
pArgs->i[0] = i[0][0];
|
pArgs->i[0] = i[0][0];
|
||||||
@ -142,7 +146,7 @@ int32_t ompi_ddt_set_args( ompi_datatype_t* pData,
|
|||||||
pos += pArgs->i[0];
|
pos += pArgs->i[0];
|
||||||
pArgs->i[pos] = i[4][0];
|
pArgs->i[pos] = i[4][0];
|
||||||
break;
|
break;
|
||||||
/******************************************************************/
|
|
||||||
case MPI_COMBINER_DARRAY:
|
case MPI_COMBINER_DARRAY:
|
||||||
pos = 3;
|
pos = 3;
|
||||||
pArgs->i[0] = i[0][0];
|
pArgs->i[0] = i[0][0];
|
||||||
@ -159,20 +163,20 @@ int32_t ompi_ddt_set_args( ompi_datatype_t* pData,
|
|||||||
pos += i[2][0];
|
pos += i[2][0];
|
||||||
pArgs->i[pos] = i[7][0];
|
pArgs->i[pos] = i[7][0];
|
||||||
break;
|
break;
|
||||||
/******************************************************************/
|
|
||||||
case MPI_COMBINER_F90_REAL:
|
case MPI_COMBINER_F90_REAL:
|
||||||
case MPI_COMBINER_F90_COMPLEX:
|
case MPI_COMBINER_F90_COMPLEX:
|
||||||
pArgs->i[0] = i[0][0];
|
pArgs->i[0] = i[0][0];
|
||||||
pArgs->i[1] = i[1][0];
|
pArgs->i[1] = i[1][0];
|
||||||
break;
|
break;
|
||||||
/******************************************************************/
|
|
||||||
case MPI_COMBINER_F90_INTEGER:
|
case MPI_COMBINER_F90_INTEGER:
|
||||||
pArgs->i[0] = i[0][0];
|
pArgs->i[0] = i[0][0];
|
||||||
break;
|
break;
|
||||||
/******************************************************************/
|
|
||||||
case MPI_COMBINER_RESIZED:
|
case MPI_COMBINER_RESIZED:
|
||||||
break;
|
break;
|
||||||
/******************************************************************/
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -326,6 +330,12 @@ static inline int __ompi_ddt_pack_description( ompi_datatype_t* datatype,
|
|||||||
position[1] = datatype->id;
|
position[1] = datatype->id;
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
/* For duplicated datatype we don't have to store all the information */
|
||||||
|
if( MPI_COMBINER_DUP == args->create_type ) {
|
||||||
|
position[local_index++] = args->create_type;
|
||||||
|
position[local_index++] = args->d[0]->id;
|
||||||
|
return OMPI_SUCCESS;
|
||||||
|
}
|
||||||
position[local_index++] = args->create_type;
|
position[local_index++] = args->create_type;
|
||||||
position[local_index++] = args->ci;
|
position[local_index++] = args->ci;
|
||||||
position[local_index++] = args->ca;
|
position[local_index++] = args->ca;
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user