summaryrefslogtreecommitdiffstats
path: root/src/H5Smpio.c
diff options
context:
space:
mode:
authorMohamad Chaarawi <chaarawi@hdfgroup.org>2014-08-11 14:27:56 (GMT)
committerMohamad Chaarawi <chaarawi@hdfgroup.org>2014-08-11 14:27:56 (GMT)
commitc1735ecdb78e0bc636cb1a4ebed8af94e96e0ef7 (patch)
tree5c8387a7d4a8ca97ad943e0bd3325ccf76fc9ee1 /src/H5Smpio.c
parent05df796d6a8afcfc092e64e408e44b3ab3c4aa89 (diff)
downloadhdf5-c1735ecdb78e0bc636cb1a4ebed8af94e96e0ef7.zip
hdf5-c1735ecdb78e0bc636cb1a4ebed8af94e96e0ef7.tar.gz
hdf5-c1735ecdb78e0bc636cb1a4ebed8af94e96e0ef7.tar.bz2
[svn-r25528] bring 25514 and 25516 from trunk:
Replace MPI deprecated routines with undeprecated ones.
Diffstat (limited to 'src/H5Smpio.c')
-rw-r--r--src/H5Smpio.c60
1 files changed, 24 insertions, 36 deletions
diff --git a/src/H5Smpio.c b/src/H5Smpio.c
index 284e16f..3da6341 100644
--- a/src/H5Smpio.c
+++ b/src/H5Smpio.c
@@ -502,9 +502,9 @@ H5S_mpio_hyper_type(const H5S_t *space, size_t elmt_size,
hsize_t max_xtent[H5S_MAX_RANK];
H5S_hyper_dim_t *diminfo; /* [rank] */
unsigned rank;
- int block_length[3];
- MPI_Datatype inner_type, outer_type, old_types[3];
- MPI_Aint extent_len, displacement[3];
+ MPI_Datatype inner_type, outer_type;
+ MPI_Aint extent_len, start_disp, new_extent;
+ MPI_Aint lb; /* Needed as an argument for MPI_Type_get_extent */
unsigned u; /* Local index variable */
int i; /* Local index variable */
int mpi_code; /* MPI return code */
@@ -671,42 +671,30 @@ H5S_mpio_hyper_type(const H5S_t *space, size_t elmt_size,
* Then build the dimension type as (start, vector type, xtent).
****************************************/
/* calculate start and extent values of this dimension */
- displacement[1] = d[i].start * offset[i] * elmt_size;
- displacement[2] = (MPI_Aint)elmt_size * max_xtent[i];
- if(MPI_SUCCESS != (mpi_code = MPI_Type_extent(outer_type, &extent_len)))
- HMPI_GOTO_ERROR(FAIL, "MPI_Type_extent failed", mpi_code)
+ start_disp = d[i].start * offset[i] * elmt_size;
+ new_extent = (MPI_Aint)elmt_size * max_xtent[i];
+ if(MPI_SUCCESS != (mpi_code = MPI_Type_get_extent(outer_type, &lb, &extent_len)))
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_get_extent failed", mpi_code)
/*************************************************
* Restructure this datatype ("outer_type")
* so that it still starts at 0, but its extent
* is the full extent in this dimension.
*************************************************/
- if(displacement[1] > 0 || (int)extent_len < displacement[2]) {
+ if(start_disp > 0 || extent_len < new_extent) {
+ MPI_Datatype interm_type;
+ int block_len = 1;
- block_length[0] = 1;
- block_length[1] = 1;
- block_length[2] = 1;
-
- displacement[0] = 0;
-
- old_types[0] = MPI_LB;
- old_types[1] = outer_type;
- old_types[2] = MPI_UB;
-#ifdef H5S_DEBUG
- if(H5DEBUG(S))
- HDfprintf(H5DEBUG(S), "%s: i=%d Extending struct type\n"
- "***displacements: %ld, %ld, %ld\n",
- FUNC, i, (long)displacement[0], (long)displacement[1], (long)displacement[2]);
-#endif
-
- mpi_code = MPI_Type_struct(3, /* count */
- block_length, /* blocklengths */
- displacement, /* displacements */
- old_types, /* old types */
- &inner_type); /* new type */
+ HDassert(0 == lb);
+ mpi_code = MPI_Type_create_hindexed(1, &block_len, &start_disp, outer_type, &interm_type);
MPI_Type_free(&outer_type);
- if(mpi_code != MPI_SUCCESS)
+ if(mpi_code != MPI_SUCCESS)
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed failed", mpi_code)
+
+ mpi_code = MPI_Type_create_resized(interm_type, lb, new_extent, &inner_type);
+ MPI_Type_free(&interm_type);
+ if(mpi_code != MPI_SUCCESS)
HMPI_GOTO_ERROR(FAIL, "couldn't resize MPI vector type", mpi_code)
} /* end if */
else
@@ -886,8 +874,8 @@ H5S_obtain_datatype(const hsize_t *down, H5S_hyper_span_t *span,
outercount++;
} /* end while */
- if(MPI_SUCCESS != (mpi_code = MPI_Type_hindexed((int)outercount, blocklen, disp, *elmt_type, span_type)))
- HMPI_GOTO_ERROR(FAIL, "MPI_Type_hindexed failed", mpi_code)
+ if(MPI_SUCCESS != (mpi_code = MPI_Type_create_hindexed((int)outercount, blocklen, disp, *elmt_type, span_type)))
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed failed", mpi_code)
span_type_valid = TRUE;
} /* end if */
else {
@@ -937,9 +925,9 @@ H5S_obtain_datatype(const hsize_t *down, H5S_hyper_span_t *span,
/* Build the MPI datatype for this node */
stride = (*down) * elmt_size;
H5_CHECK_OVERFLOW(tspan->nelem, hsize_t, int)
- if(MPI_SUCCESS != (mpi_code = MPI_Type_hvector((int)tspan->nelem, 1, stride, down_type, &inner_type[outercount]))) {
+ if(MPI_SUCCESS != (mpi_code = MPI_Type_create_hvector((int)tspan->nelem, 1, stride, down_type, &inner_type[outercount]))) {
MPI_Type_free(&down_type);
- HMPI_GOTO_ERROR(FAIL, "MPI_Type_hvector failed", mpi_code)
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hvector failed", mpi_code)
} /* end if */
/* Release MPI datatype for next dimension down */
@@ -952,8 +940,8 @@ H5S_obtain_datatype(const hsize_t *down, H5S_hyper_span_t *span,
/* building the whole vector datatype */
H5_CHECK_OVERFLOW(outercount, size_t, int)
- if(MPI_SUCCESS != (mpi_code = MPI_Type_struct((int)outercount, blocklen, disp, inner_type, span_type)))
- HMPI_GOTO_ERROR(FAIL, "MPI_Type_struct failed", mpi_code)
+ if(MPI_SUCCESS != (mpi_code = MPI_Type_create_struct((int)outercount, blocklen, disp, inner_type, span_type)))
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_struct failed", mpi_code)
span_type_valid = TRUE;
/* Release inner node types */