From: Augustin Degomme Date: Mon, 8 Apr 2013 17:59:23 +0000 (+0200) Subject: Attempt to fix problems with complex datatype copy in smpi X-Git-Tag: v3_9_90~412^2~39 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/9dcbaf12eae0cdee463970e9c8716a6bf70dd1e0?hp=1ba7f6b1ee9d622c2922456975c080242d052eae Attempt to fix problems with complex datatype copy in smpi --- diff --git a/src/smpi/smpi_mpi_dt.c b/src/smpi/smpi_mpi_dt.c index 29471e963e..59512b6edd 100644 --- a/src/smpi/smpi_mpi_dt.c +++ b/src/smpi/smpi_mpi_dt.c @@ -177,13 +177,12 @@ int smpi_datatype_copy(void *sendbuf, int sendcount, MPI_Datatype sendtype, }else{ s_smpi_subtype_t *subtype = sendtype->substruct; - s_smpi_mpi_vector_t* type_c = (s_smpi_mpi_vector_t*)sendtype; - void * buf_tmp = xbt_malloc(count * type_c->size_oldtype); + void * buf_tmp = xbt_malloc(count); subtype->serialize( sendbuf, buf_tmp,1, subtype); subtype = recvtype->substruct; - subtype->unserialize(recvbuf, buf_tmp,1, subtype); + subtype->unserialize( buf_tmp, recvbuf,1, subtype); free(buf_tmp); } diff --git a/src/smpi/smpi_mpi_dt_private.h b/src/smpi/smpi_mpi_dt_private.h index 608beffc69..656754d8c8 100644 --- a/src/smpi/smpi_mpi_dt_private.h +++ b/src/smpi/smpi_mpi_dt_private.h @@ -42,42 +42,44 @@ extern MPI_Datatype MPI_PTR; typedef struct s_smpi_mpi_vector{ s_smpi_subtype_t base; + MPI_Datatype old_type; + size_t size_oldtype; size_t block_stride; size_t block_length; size_t block_count; - MPI_Datatype old_type; - size_t size_oldtype; } s_smpi_mpi_vector_t; typedef struct s_smpi_mpi_hvector{ s_smpi_subtype_t base; + MPI_Datatype old_type; + size_t size_oldtype; MPI_Aint block_stride; size_t block_length; size_t block_count; - MPI_Datatype old_type; - size_t size_oldtype; } s_smpi_mpi_hvector_t; typedef struct s_smpi_mpi_indexed{ s_smpi_subtype_t base; + MPI_Datatype old_type; + size_t size_oldtype; int* block_lengths; int* block_indices; size_t block_count; - MPI_Datatype old_type; - size_t size_oldtype; } s_smpi_mpi_indexed_t; typedef struct s_smpi_mpi_hindexed{ s_smpi_subtype_t base; + MPI_Datatype old_type; + size_t size_oldtype; int* block_lengths; MPI_Aint* block_indices; size_t block_count; - MPI_Datatype old_type; - size_t size_oldtype; } s_smpi_mpi_hindexed_t; typedef struct s_smpi_mpi_struct{ s_smpi_subtype_t base; + MPI_Datatype old_type; + size_t size_oldtype; int* block_lengths; MPI_Aint* block_indices; size_t block_count;