return new_t;
}
-void smpi_datatype_create(MPI_Datatype* new_type, int size, int has_subtype,
+void smpi_datatype_create(MPI_Datatype* new_type, int size,int extent, int has_subtype,
void *struct_type, int flags){
MPI_Datatype new_t= xbt_new(s_smpi_mpi_datatype_t,1);
new_t->size = size;
new_t->has_subtype = has_subtype;
new_t->lb = 0;
- new_t->ub = size;
+ new_t->ub = extent;
new_t->flags = flags;
new_t->substruct = struct_type;
*new_type = new_t;
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 * (blocklen) *
smpi_datatype_size(old_type),
+ ((count -1) * stride + blocklen) * smpi_datatype_size(old_type),
1,
subtype,
DT_FLAG_VECTOR);
/* 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,
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,
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,
smpi_datatype_size(old_type));
smpi_datatype_create(new_type, size *
- smpi_datatype_size(old_type),1, subtype, DT_FLAG_DATA);
+ 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;
smpi_datatype_size(old_type));
smpi_datatype_create(new_type, size *
- smpi_datatype_size(old_type),1, subtype, DT_FLAG_DATA);
+ 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;
count,
old_types);
- smpi_datatype_create(new_type, size ,1, subtype, DT_FLAG_DATA);
+ smpi_datatype_create(new_type, size, indices[count-1] + blocklens[count-1]*smpi_datatype_size(old_types[count-1]),1, subtype, DT_FLAG_DATA);
}else{
- smpi_datatype_create(new_type, size,0, NULL, DT_FLAG_DATA|DT_FLAG_CONTIGUOUS);
+ smpi_datatype_create(new_type, size, indices[count-1] + blocklens[count-1]*smpi_datatype_size(old_types[count-1]),0, NULL, DT_FLAG_DATA|DT_FLAG_CONTIGUOUS);
}
return MPI_SUCCESS;
}