// Internal use only
CREATE_MPI_DATATYPE(MPI_PTR, void*);
+/** Check if the datatype is usable for communications
+ */
+int is_datatype_valid(MPI_Datatype datatype) {
+ return datatype != MPI_DATATYPE_NULL
+ && (datatype->flags & DT_FLAG_COMMITED);
+}
size_t smpi_datatype_size(MPI_Datatype datatype)
{
return datatype->size;
}
-
-
MPI_Aint smpi_datatype_lb(MPI_Datatype datatype)
{
return datatype->lb;
void *recvbuf, int recvcount, MPI_Datatype recvtype)
{
int count;
-
+ if(smpi_privatize_global_variables){
+ switch_data_segment(smpi_process_index());
+ }
/* First check if we really have something to do */
if (recvcount > 0 && recvbuf != sendbuf) {
/* FIXME: treat packed cases */
xbt_free((*type)->substruct);
}
xbt_free(*type);
-
+ *type = MPI_DATATYPE_NULL;
}
void smpi_datatype_use(MPI_Datatype type){