From: Augustin Degomme Date: Tue, 23 Oct 2012 08:11:47 +0000 (+0200) Subject: we should not check subtypes are commited before, as this is not required by the... X-Git-Tag: v3_8~21^2~2 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/3ea9223ebad3390472a85fb08379687cfea1f21d?hp=b2208a5ab266b760d9b1b26198b38f2b0ade2e26 we should not check subtypes are commited before, as this is not required by the standard, only types directly used in MPI calls should be commited --- diff --git a/src/smpi/smpi_mpi_dt.c b/src/smpi/smpi_mpi_dt.c index 5e22c33a20..efc7f6b1b6 100644 --- a/src/smpi/smpi_mpi_dt.c +++ b/src/smpi/smpi_mpi_dt.c @@ -289,14 +289,10 @@ void smpi_datatype_free(MPI_Datatype* type){ int smpi_datatype_contiguous(int count, MPI_Datatype old_type, MPI_Datatype* new_type) { int retval; - if ((old_type->flags & DT_FLAG_COMMITED) != DT_FLAG_COMMITED) { - retval = MPI_ERR_TYPE; - } else { - smpi_datatype_create(new_type, count * - smpi_datatype_size(old_type),count * - smpi_datatype_size(old_type),0,NULL, DT_FLAG_CONTIGUOUS); - retval=MPI_SUCCESS; - } + smpi_datatype_create(new_type, count * + smpi_datatype_size(old_type),count * + smpi_datatype_size(old_type),0,NULL, DT_FLAG_CONTIGUOUS); + retval=MPI_SUCCESS; return retval; } @@ -304,36 +300,31 @@ int smpi_datatype_vector(int count, int blocklen, int stride, MPI_Datatype old_t { int retval; if (blocklen<=0) return MPI_ERR_ARG; - if ((old_type->flags & DT_FLAG_COMMITED) != DT_FLAG_COMMITED) { - retval = MPI_ERR_TYPE; - } else { - if(stride != blocklen){ -if (old_type->has_subtype == 1) - XBT_WARN("vector contains a complex type - not yet handled"); - s_smpi_mpi_vector_t* subtype = smpi_datatype_vector_create( stride, - blocklen, - count, - old_type, - smpi_datatype_size(old_type)); - - smpi_datatype_create(new_type, count * (blocklen) * - smpi_datatype_size(old_type), - ((count -1) * stride + blocklen) * smpi_datatype_size(old_type), - 1, - subtype, - DT_FLAG_VECTOR); - retval=MPI_SUCCESS; - }else{ - /* in this situation the data are contignous thus it's not - * required to serialize and unserialize it*/ - smpi_datatype_create(new_type, count * blocklen * - smpi_datatype_size(old_type), ((count -1) * stride + blocklen)* - smpi_datatype_size(old_type), - 0, - NULL, - DT_FLAG_VECTOR|DT_FLAG_CONTIGUOUS); - retval=MPI_SUCCESS; - } + if(stride != blocklen){ + if (old_type->has_subtype == 1) + XBT_WARN("vector contains a complex type - not yet handled"); + s_smpi_mpi_vector_t* subtype = smpi_datatype_vector_create( stride, + blocklen, + count, + old_type, + smpi_datatype_size(old_type)); + smpi_datatype_create(new_type, count * (blocklen) * + smpi_datatype_size(old_type), + ((count -1) * stride + blocklen) * smpi_datatype_size(old_type), + 1, + subtype, + DT_FLAG_VECTOR); + retval=MPI_SUCCESS; + }else{ + /* in this situation the data are contignous thus it's not + * required to serialize and unserialize it*/ + smpi_datatype_create(new_type, count * blocklen * + smpi_datatype_size(old_type), ((count -1) * stride + blocklen)* + smpi_datatype_size(old_type), + 0, + NULL, + DT_FLAG_VECTOR|DT_FLAG_CONTIGUOUS); + retval=MPI_SUCCESS; } return retval; } @@ -433,34 +424,30 @@ int smpi_datatype_hvector(int count, int blocklen, MPI_Aint stride, MPI_Datatype { int retval; if (blocklen<=0) return MPI_ERR_ARG; - if ((old_type->flags & DT_FLAG_COMMITED) != DT_FLAG_COMMITED) { - retval = MPI_ERR_TYPE; - } else { -if (old_type->has_subtype == 1) + if (old_type->has_subtype == 1) XBT_WARN("hvector contains a complex type - not yet handled"); - if(stride != blocklen*smpi_datatype_size(old_type)){ - s_smpi_mpi_hvector_t* subtype = smpi_datatype_hvector_create( stride, - blocklen, - count, - old_type, - smpi_datatype_size(old_type)); - - smpi_datatype_create(new_type, count * blocklen * - smpi_datatype_size(old_type), (count-1) * stride + blocklen * - smpi_datatype_size(old_type), - 1, - subtype, - DT_FLAG_VECTOR); - retval=MPI_SUCCESS; - }else{ - smpi_datatype_create(new_type, count * blocklen * - smpi_datatype_size(old_type),count * blocklen * - smpi_datatype_size(old_type), - 0, - NULL, - DT_FLAG_VECTOR|DT_FLAG_CONTIGUOUS); - retval=MPI_SUCCESS; - } + if(stride != blocklen*smpi_datatype_size(old_type)){ + s_smpi_mpi_hvector_t* subtype = smpi_datatype_hvector_create( stride, + blocklen, + count, + old_type, + smpi_datatype_size(old_type)); + + smpi_datatype_create(new_type, count * blocklen * + smpi_datatype_size(old_type), (count-1) * stride + blocklen * + smpi_datatype_size(old_type), + 1, + subtype, + DT_FLAG_VECTOR); + retval=MPI_SUCCESS; + }else{ + smpi_datatype_create(new_type, count * blocklen * + smpi_datatype_size(old_type),count * blocklen * + smpi_datatype_size(old_type), + 0, + NULL, + DT_FLAG_VECTOR|DT_FLAG_CONTIGUOUS); + retval=MPI_SUCCESS; } return retval; } @@ -579,29 +566,23 @@ int smpi_datatype_indexed(int count, int* blocklens, int* indices, MPI_Datatype if ( (i< count -1) && (indices[i]+blocklens[i] != indices[i+1]) )contiguous=0; } - if ((old_type->flags & DT_FLAG_COMMITED) != DT_FLAG_COMMITED) { - retval = MPI_ERR_TYPE; - } else { + if (old_type->has_subtype == 1) + XBT_WARN("indexed contains a complex type - not yet handled"); - if (old_type->has_subtype == 1) - XBT_WARN("indexed contains a complex type - not yet handled"); - - if(!contiguous){ - s_smpi_mpi_indexed_t* subtype = smpi_datatype_indexed_create( blocklens, - indices, - count, - old_type, - smpi_datatype_size(old_type)); - - smpi_datatype_create(new_type, size * - smpi_datatype_size(old_type),(indices[count-1]+blocklens[count-1])*smpi_datatype_size(old_type),1, subtype, DT_FLAG_DATA); -}else{ - smpi_datatype_create(new_type, size * - smpi_datatype_size(old_type),size * - smpi_datatype_size(old_type),0, NULL, DT_FLAG_DATA|DT_FLAG_CONTIGUOUS); -} - retval=MPI_SUCCESS; + if(!contiguous){ + s_smpi_mpi_indexed_t* subtype = smpi_datatype_indexed_create( blocklens, + indices, + count, + old_type, + smpi_datatype_size(old_type)); + smpi_datatype_create(new_type, size * + smpi_datatype_size(old_type),(indices[count-1]+blocklens[count-1])*smpi_datatype_size(old_type),1, subtype, DT_FLAG_DATA); + }else{ + smpi_datatype_create(new_type, size * + smpi_datatype_size(old_type),size * + smpi_datatype_size(old_type),0, NULL, DT_FLAG_DATA|DT_FLAG_CONTIGUOUS); } + retval=MPI_SUCCESS; return retval; } @@ -716,33 +697,25 @@ int smpi_datatype_hindexed(int count, int* blocklens, MPI_Aint* indices, MPI_Dat if (blocklens[i]<=0) return MPI_ERR_ARG; size += blocklens[i]; - - if ( (i< count -1) && (indices[i]+blocklens[i]*smpi_datatype_size(old_type) != indices[i+1]) )contiguous=0; } - if ((old_type->flags & DT_FLAG_COMMITED) != DT_FLAG_COMMITED) { - retval = MPI_ERR_TYPE; - } else { - if (old_type->has_subtype == 1) - XBT_WARN("hindexed contains a complex type - not yet handled"); - - if(!contiguous){ - s_smpi_mpi_hindexed_t* subtype = smpi_datatype_hindexed_create( blocklens, - indices, - count, - old_type, - smpi_datatype_size(old_type)); - - smpi_datatype_create(new_type, size * - smpi_datatype_size(old_type),indices[count-1]+blocklens[count-1]*smpi_datatype_size(old_type) - ,1, subtype, DT_FLAG_DATA); - }else{ - smpi_datatype_create(new_type, size * - smpi_datatype_size(old_type),size * - smpi_datatype_size(old_type),0, NULL, DT_FLAG_DATA|DT_FLAG_CONTIGUOUS); - } - retval=MPI_SUCCESS; + if (old_type->has_subtype == 1) + XBT_WARN("hindexed contains a complex type - not yet handled"); + if(!contiguous){ + s_smpi_mpi_hindexed_t* subtype = smpi_datatype_hindexed_create( blocklens, + indices, + count, + old_type, + smpi_datatype_size(old_type)); + smpi_datatype_create(new_type, size * + smpi_datatype_size(old_type),indices[count-1]+blocklens[count-1]*smpi_datatype_size(old_type) + ,1, subtype, DT_FLAG_DATA); + }else{ + smpi_datatype_create(new_type, size * + smpi_datatype_size(old_type),size * + smpi_datatype_size(old_type),0, NULL, DT_FLAG_DATA|DT_FLAG_CONTIGUOUS); } + retval=MPI_SUCCESS; return retval; } @@ -858,8 +831,6 @@ int smpi_datatype_struct(int count, int* blocklens, MPI_Aint* indices, MPI_Datat for(i=0; i< count; i++){ if (blocklens[i]<=0) return MPI_ERR_ARG; - if ((old_types[i]->flags & DT_FLAG_COMMITED) != DT_FLAG_COMMITED) - return MPI_ERR_TYPE; if (old_types[i]->has_subtype == 1) XBT_WARN("Struct contains a complex type - not yet handled"); size += blocklens[i]*smpi_datatype_size(old_types[i]);