[svn-r1071] Moved the MPI test to a file of its own (t_mpi.c) for future addition

of other MPI tests.
Changed return code tests from comparing with FAIL to with 0.
Updated MANIFEST for the addition of a new file.
Tested in O2k.
This commit is contained in:
Albert Cheng 1999-02-16 23:39:22 -05:00
parent 8ed6e88543
commit a3a9df3657
6 changed files with 259 additions and 257 deletions

View File

@ -353,6 +353,7 @@
./testpar/README
./testpar/t_dset.c
./testpar/t_file.c
./testpar/t_mpi.c
./testpar/testphdf5.c
./testpar/testphdf5.h

View File

@ -22,7 +22,7 @@ MOSTLYCLEAN=ParaEg[123].h5f
DISTCLEAN=go
# Test source files
TEST_SRC=testphdf5.c t_dset.c t_file.c
TEST_SRC=testphdf5.c t_dset.c t_file.c t_mpi.c
TEST_OBJ=$(TEST_SRC:.c=.o)
PRIVATE_HDR=testphdf5.h

View File

@ -214,18 +214,18 @@ dataset_writeInd(char *filename)
* ---------------------------------------*/
/* setup file access template with parallel IO access. */
acc_tpl = H5Pcreate (H5P_FILE_ACCESS);
VRFY((acc_tpl != FAIL), "H5Pcreate access succeeded");
VRFY((acc_tpl >= 0), "H5Pcreate access succeeded");
/* set Parallel access with communicator */
ret = H5Pset_mpi(acc_tpl, comm, info);
VRFY((ret != FAIL), "H5Pset_mpi succeeded");
VRFY((ret >= 0), "H5Pset_mpi succeeded");
/* create the file collectively */
fid=H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl);
VRFY((fid != FAIL), "H5Fcreate succeeded");
VRFY((fid >= 0), "H5Fcreate succeeded");
/* Release file-access template */
ret=H5Pclose(acc_tpl);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
/* ---------------------------------------------
@ -234,18 +234,18 @@ dataset_writeInd(char *filename)
* ------------------------------------------- */
/* setup dimensionality object */
sid = H5Screate_simple (RANK, dims, NULL);
VRFY((sid != FAIL), "H5Screate_simple succeeded");
VRFY((sid >= 0), "H5Screate_simple succeeded");
/* create a dataset collectively */
dataset1 = H5Dcreate(fid, DATASETNAME1, H5T_NATIVE_INT, sid,
H5P_DEFAULT);
VRFY((dataset1 != FAIL), "H5Dcreate succeeded");
VRFY((dataset1 >= 0), "H5Dcreate succeeded");
/* create another dataset collectively */
dataset2 = H5Dcreate(fid, DATASETNAME2, H5T_NATIVE_INT, sid,
H5P_DEFAULT);
VRFY((dataset2 != FAIL), "H5Dcreate succeeded");
VRFY((dataset2 >= 0), "H5Dcreate succeeded");
/*
@ -263,31 +263,31 @@ dataset_writeInd(char *filename)
/* create a file dataspace independently */
file_dataspace = H5Dget_space (dataset1);
VRFY((file_dataspace != FAIL), "H5Dget_space succeeded");
VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, NULL);
VRFY((ret != FAIL), "H5Sset_hyperslab succeeded");
VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
/* create a memory dataspace independently */
mem_dataspace = H5Screate_simple (RANK, count, NULL);
VRFY((mem_dataspace != FAIL), "");
VRFY((mem_dataspace >= 0), "");
/* write data independently */
ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
H5P_DEFAULT, data_array1);
VRFY((ret != FAIL), "H5Dwrite dataset1 succeeded");
VRFY((ret >= 0), "H5Dwrite dataset1 succeeded");
/* write data independently */
ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
H5P_DEFAULT, data_array1);
VRFY((ret != FAIL), "H5Dwrite dataset2 succeeded");
VRFY((ret >= 0), "H5Dwrite dataset2 succeeded");
/* release dataspace ID */
H5Sclose(file_dataspace);
/* close dataset collectively */
ret=H5Dclose(dataset1);
VRFY((ret != FAIL), "H5Dclose1 succeeded");
VRFY((ret >= 0), "H5Dclose1 succeeded");
ret=H5Dclose(dataset2);
VRFY((ret != FAIL), "H5Dclose2 succeeded");
VRFY((ret >= 0), "H5Dclose2 succeeded");
/* release all IDs created */
H5Sclose(sid);
@ -330,27 +330,27 @@ dataset_readInd(char *filename)
/* setup file access template */
acc_tpl = H5Pcreate (H5P_FILE_ACCESS);
VRFY((acc_tpl != FAIL), "");
VRFY((acc_tpl >= 0), "");
/* set Parallel access with communicator */
ret = H5Pset_mpi(acc_tpl, comm, info);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
/* open the file collectively */
fid=H5Fopen(filename,H5F_ACC_RDONLY,acc_tpl);
VRFY((fid != FAIL), "");
VRFY((fid >= 0), "");
/* Release file-access template */
ret=H5Pclose(acc_tpl);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
/* open the dataset1 collectively */
dataset1 = H5Dopen(fid, DATASETNAME1);
VRFY((dataset1 != FAIL), "");
VRFY((dataset1 >= 0), "");
/* open another dataset collectively */
dataset2 = H5Dopen(fid, DATASETNAME1);
VRFY((dataset2 != FAIL), "");
VRFY((dataset2 >= 0), "");
/* set up dimensions of the slab this process accesses */
@ -358,13 +358,13 @@ dataset_readInd(char *filename)
/* create a file dataspace independently */
file_dataspace = H5Dget_space (dataset1);
VRFY((file_dataspace != FAIL), "");
VRFY((file_dataspace >= 0), "");
ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, NULL);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
/* create a memory dataspace independently */
mem_dataspace = H5Screate_simple (RANK, count, NULL);
VRFY((mem_dataspace != FAIL), "");
VRFY((mem_dataspace >= 0), "");
/* fill dataset with test data */
dataset_fill(start, count, stride, &data_origin1[0][0]);
@ -372,7 +372,7 @@ dataset_readInd(char *filename)
/* read data independently */
ret = H5Dread(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
H5P_DEFAULT, data_array1);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
/* verify the read data with original expected data */
ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
@ -381,7 +381,7 @@ dataset_readInd(char *filename)
/* read data independently */
ret = H5Dread(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
H5P_DEFAULT, data_array1);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
/* verify the read data with original expected data */
ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
@ -389,9 +389,9 @@ dataset_readInd(char *filename)
/* close dataset collectively */
ret=H5Dclose(dataset1);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
ret=H5Dclose(dataset2);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
/* release all IDs created */
H5Sclose(file_dataspace);
@ -449,18 +449,18 @@ dataset_writeAll(char *filename)
* -------------------*/
/* setup file access template with parallel IO access. */
acc_tpl = H5Pcreate (H5P_FILE_ACCESS);
VRFY((acc_tpl != FAIL), "H5Pcreate access succeeded");
VRFY((acc_tpl >= 0), "H5Pcreate access succeeded");
/* set Parallel access with communicator */
ret = H5Pset_mpi(acc_tpl, comm, info);
VRFY((ret != FAIL), "H5Pset_mpi succeeded");
VRFY((ret >= 0), "H5Pset_mpi succeeded");
/* create the file collectively */
fid=H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl);
VRFY((fid != FAIL), "H5Fcreate succeeded");
VRFY((fid >= 0), "H5Fcreate succeeded");
/* Release file-access template */
ret=H5Pclose(acc_tpl);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
/* --------------------------
@ -469,20 +469,20 @@ dataset_writeAll(char *filename)
* ------------------------- */
/* setup dimensionality object */
sid = H5Screate_simple (RANK, dims, NULL);
VRFY((sid != FAIL), "H5Screate_simple succeeded");
VRFY((sid >= 0), "H5Screate_simple succeeded");
/* create a dataset collectively */
dataset1 = H5Dcreate(fid, DATASETNAME1, H5T_NATIVE_INT, sid, H5P_DEFAULT);
VRFY((dataset1 != FAIL), "H5Dcreate succeeded");
VRFY((dataset1 >= 0), "H5Dcreate succeeded");
/* create another dataset collectively */
datatype = H5Tcopy(H5T_NATIVE_INT);
ret = H5Tset_order(datatype, H5T_ORDER_LE);
VRFY((ret != FAIL), "H5Tset_order succeeded");
VRFY((ret >= 0), "H5Tset_order succeeded");
dataset2 = H5Dcreate(fid, DATASETNAME2, datatype, sid, H5P_DEFAULT);
VRFY((dataset2 != FAIL), "H5Dcreate 2 succeeded");
VRFY((dataset2 >= 0), "H5Dcreate 2 succeeded");
/*
* Set up dimensions of the slab this process accesses.
@ -493,13 +493,13 @@ dataset_writeAll(char *filename)
/* create a file dataspace independently */
file_dataspace = H5Dget_space (dataset1);
VRFY((file_dataspace != FAIL), "H5Dget_space succeeded");
VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, NULL);
VRFY((ret != FAIL), "H5Sset_hyperslab succeeded");
VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
/* create a memory dataspace independently */
mem_dataspace = H5Screate_simple (RANK, count, NULL);
VRFY((mem_dataspace != FAIL), "");
VRFY((mem_dataspace >= 0), "");
/* fill the local slab with some trivial data */
dataset_fill(start, count, stride, &data_array1[0][0]);
@ -511,14 +511,14 @@ dataset_writeAll(char *filename)
/* set up the collective transfer properties list */
xfer_plist = H5Pcreate (H5P_DATASET_XFER);
VRFY((xfer_plist != FAIL), "");
VRFY((xfer_plist >= 0), "");
ret=H5Pset_xfer(xfer_plist, H5D_XFER_COLLECTIVE);
VRFY((ret != FAIL), "H5Pcreate xfer succeeded");
VRFY((ret >= 0), "H5Pcreate xfer succeeded");
/* write data collectively */
ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
xfer_plist, data_array1);
VRFY((ret != FAIL), "H5Dwrite dataset1 succeeded");
VRFY((ret >= 0), "H5Dwrite dataset1 succeeded");
/* release all temporary handles. */
/* Could have used them for dataset2 but it is cleaner */
@ -540,13 +540,13 @@ dataset_writeAll(char *filename)
/* create a file dataspace independently */
file_dataspace = H5Dget_space (dataset1);
VRFY((file_dataspace != FAIL), "H5Dget_space succeeded");
VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, NULL);
VRFY((ret != FAIL), "H5Sset_hyperslab succeeded");
VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
/* create a memory dataspace independently */
mem_dataspace = H5Screate_simple (RANK, count, NULL);
VRFY((mem_dataspace != FAIL), "");
VRFY((mem_dataspace >= 0), "");
/* fill the local slab with some trivial data */
dataset_fill(start, count, stride, &data_array1[0][0]);
@ -558,14 +558,14 @@ dataset_writeAll(char *filename)
/* set up the collective transfer properties list */
xfer_plist = H5Pcreate (H5P_DATASET_XFER);
VRFY((xfer_plist != FAIL), "");
VRFY((xfer_plist >= 0), "");
ret=H5Pset_xfer(xfer_plist, H5D_XFER_COLLECTIVE);
VRFY((ret != FAIL), "H5Pcreate xfer succeeded");
VRFY((ret >= 0), "H5Pcreate xfer succeeded");
/* write data independently */
ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
xfer_plist, data_array1);
VRFY((ret != FAIL), "H5Dwrite dataset2 succeeded");
VRFY((ret >= 0), "H5Dwrite dataset2 succeeded");
/* release all temporary handles. */
H5Sclose(file_dataspace);
@ -577,9 +577,9 @@ dataset_writeAll(char *filename)
* All writes completed. Close datasets collectively
*/
ret=H5Dclose(dataset1);
VRFY((ret != FAIL), "H5Dclose1 succeeded");
VRFY((ret >= 0), "H5Dclose1 succeeded");
ret=H5Dclose(dataset2);
VRFY((ret != FAIL), "H5Dclose2 succeeded");
VRFY((ret >= 0), "H5Dclose2 succeeded");
/* release all IDs created */
H5Sclose(sid);
@ -632,18 +632,18 @@ dataset_readAll(char *filename)
* -------------------*/
/* setup file access template with parallel IO access. */
acc_tpl = H5Pcreate (H5P_FILE_ACCESS);
VRFY((acc_tpl != FAIL), "H5Pcreate access succeeded");
VRFY((acc_tpl >= 0), "H5Pcreate access succeeded");
/* set Parallel access with communicator */
ret = H5Pset_mpi(acc_tpl, comm, info);
VRFY((ret != FAIL), "H5Pset_mpi succeeded");
VRFY((ret >= 0), "H5Pset_mpi succeeded");
/* open the file collectively */
fid=H5Fopen(filename,H5F_ACC_RDONLY,acc_tpl);
VRFY((fid != FAIL), "H5Fopen succeeded");
VRFY((fid >= 0), "H5Fopen succeeded");
/* Release file-access template */
ret=H5Pclose(acc_tpl);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
/* --------------------------
@ -651,11 +651,11 @@ dataset_readAll(char *filename)
* ------------------------- */
/* open the dataset1 collectively */
dataset1 = H5Dopen(fid, DATASETNAME1);
VRFY((dataset1 != FAIL), "H5Dopen succeeded");
VRFY((dataset1 >= 0), "H5Dopen succeeded");
/* open another dataset collectively */
dataset2 = H5Dopen(fid, DATASETNAME2);
VRFY((dataset2 != FAIL), "H5Dopen 2 succeeded");
VRFY((dataset2 >= 0), "H5Dopen 2 succeeded");
/*
* Set up dimensions of the slab this process accesses.
@ -666,13 +666,13 @@ dataset_readAll(char *filename)
/* create a file dataspace independently */
file_dataspace = H5Dget_space (dataset1);
VRFY((file_dataspace != FAIL), "H5Dget_space succeeded");
VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, NULL);
VRFY((ret != FAIL), "H5Sset_hyperslab succeeded");
VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
/* create a memory dataspace independently */
mem_dataspace = H5Screate_simple (RANK, count, NULL);
VRFY((mem_dataspace != FAIL), "");
VRFY((mem_dataspace >= 0), "");
/* fill dataset with test data */
dataset_fill(start, count, stride, &data_origin1[0][0]);
@ -684,14 +684,14 @@ dataset_readAll(char *filename)
/* set up the collective transfer properties list */
xfer_plist = H5Pcreate (H5P_DATASET_XFER);
VRFY((xfer_plist != FAIL), "");
VRFY((xfer_plist >= 0), "");
ret=H5Pset_xfer(xfer_plist, H5D_XFER_COLLECTIVE);
VRFY((ret != FAIL), "H5Pcreate xfer succeeded");
VRFY((ret >= 0), "H5Pcreate xfer succeeded");
/* read data collectively */
ret = H5Dread(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
xfer_plist, data_array1);
VRFY((ret != FAIL), "H5Dread succeeded");
VRFY((ret >= 0), "H5Dread succeeded");
/* verify the read data with original expected data */
ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
@ -709,13 +709,13 @@ dataset_readAll(char *filename)
/* create a file dataspace independently */
file_dataspace = H5Dget_space (dataset1);
VRFY((file_dataspace != FAIL), "H5Dget_space succeeded");
VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, NULL);
VRFY((ret != FAIL), "H5Sset_hyperslab succeeded");
VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
/* create a memory dataspace independently */
mem_dataspace = H5Screate_simple (RANK, count, NULL);
VRFY((mem_dataspace != FAIL), "");
VRFY((mem_dataspace >= 0), "");
/* fill dataset with test data */
dataset_fill(start, count, stride, &data_origin1[0][0]);
@ -727,14 +727,14 @@ dataset_readAll(char *filename)
/* set up the collective transfer properties list */
xfer_plist = H5Pcreate (H5P_DATASET_XFER);
VRFY((xfer_plist != FAIL), "");
VRFY((xfer_plist >= 0), "");
ret=H5Pset_xfer(xfer_plist, H5D_XFER_COLLECTIVE);
VRFY((ret != FAIL), "H5Pcreate xfer succeeded");
VRFY((ret >= 0), "H5Pcreate xfer succeeded");
/* read data independently */
ret = H5Dread(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
xfer_plist, data_array1);
VRFY((ret != FAIL), "H5Dread succeeded");
VRFY((ret >= 0), "H5Dread succeeded");
/* verify the read data with original expected data */
ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
@ -750,9 +750,9 @@ dataset_readAll(char *filename)
* All reads completed. Close datasets collectively
*/
ret=H5Dclose(dataset1);
VRFY((ret != FAIL), "H5Dclose1 succeeded");
VRFY((ret >= 0), "H5Dclose1 succeeded");
ret=H5Dclose(dataset2);
VRFY((ret != FAIL), "H5Dclose2 succeeded");
VRFY((ret >= 0), "H5Dclose2 succeeded");
/* close the file collectively */
H5Fclose(fid);
@ -812,18 +812,18 @@ extend_writeInd(char *filename)
* -------------------*/
/* setup file access template with parallel IO access. */
acc_tpl = H5Pcreate (H5P_FILE_ACCESS);
VRFY((acc_tpl != FAIL), "H5Pcreate access succeeded");
VRFY((acc_tpl >= 0), "H5Pcreate access succeeded");
/* set Parallel access with communicator */
ret = H5Pset_mpi(acc_tpl, comm, info);
VRFY((ret != FAIL), "H5Pset_mpi succeeded");
VRFY((ret >= 0), "H5Pset_mpi succeeded");
/* create the file collectively */
fid=H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl);
VRFY((fid != FAIL), "H5Fcreate succeeded");
VRFY((fid >= 0), "H5Fcreate succeeded");
/* Release file-access template */
ret=H5Pclose(acc_tpl);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
/* --------------------------------------------------------------
@ -834,23 +834,23 @@ extend_writeInd(char *filename)
if (verbose)
printf("chunks[]=%d,%d\n", chunk_dims[0], chunk_dims[1]);
dataset_pl = H5Pcreate(H5P_DATASET_CREATE);
VRFY((dataset_pl != FAIL), "H5Pcreate succeeded");
VRFY((dataset_pl >= 0), "H5Pcreate succeeded");
ret = H5Pset_chunk(dataset_pl, RANK, chunk_dims);
VRFY((ret != FAIL), "H5Pset_chunk succeeded");
VRFY((ret >= 0), "H5Pset_chunk succeeded");
/* setup dimensionality object */
/* start out with no rows, extend it later. */
dims[0] = dims[1] = 0;
sid = H5Screate_simple (RANK, dims, max_dims);
VRFY((sid != FAIL), "H5Screate_simple succeeded");
VRFY((sid >= 0), "H5Screate_simple succeeded");
/* create an extendible dataset collectively */
dataset1 = H5Dcreate(fid, DATASETNAME1, H5T_NATIVE_INT, sid, dataset_pl);
VRFY((dataset1 != FAIL), "H5Dcreate succeeded");
VRFY((dataset1 >= 0), "H5Dcreate succeeded");
/* create another extendible dataset collectively */
dataset2 = H5Dcreate(fid, DATASETNAME2, H5T_NATIVE_INT, sid, dataset_pl);
VRFY((dataset2 != FAIL), "H5Dcreate succeeded");
VRFY((dataset2 >= 0), "H5Dcreate succeeded");
/* release resource */
H5Sclose(sid);
@ -873,24 +873,24 @@ extend_writeInd(char *filename)
/* create a memory dataspace independently */
mem_dataspace = H5Screate_simple (RANK, count, NULL);
VRFY((mem_dataspace != FAIL), "");
VRFY((mem_dataspace >= 0), "");
/* Extend its current dim sizes before writing */
dims[0] = DIM1;
dims[1] = DIM2;
ret = H5Dextend (dataset1, dims);
VRFY((ret != FAIL), "H5Dextend succeeded");
VRFY((ret >= 0), "H5Dextend succeeded");
/* create a file dataspace independently */
file_dataspace = H5Dget_space (dataset1);
VRFY((file_dataspace != FAIL), "H5Dget_space succeeded");
VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, NULL);
VRFY((ret != FAIL), "H5Sset_hyperslab succeeded");
VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
/* write data independently */
ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
H5P_DEFAULT, data_array1);
VRFY((ret != FAIL), "H5Dwrite succeeded");
VRFY((ret >= 0), "H5Dwrite succeeded");
/* release resource */
H5Sclose(file_dataspace);
@ -913,7 +913,7 @@ extend_writeInd(char *filename)
/* create a memory dataspace independently */
mem_dataspace = H5Screate_simple (RANK, count, NULL);
VRFY((mem_dataspace != FAIL), "");
VRFY((mem_dataspace >= 0), "");
#ifndef DISABLE
/* Try write to dataset2 beyond its current dim sizes. Should fail. */
@ -923,14 +923,14 @@ extend_writeInd(char *filename)
/* create a file dataspace independently */
file_dataspace = H5Dget_space (dataset2);
VRFY((file_dataspace != FAIL), "H5Dget_space succeeded");
VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, NULL);
VRFY((ret != FAIL), "H5Sset_hyperslab succeeded");
VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
/* write data independently. Should fail. */
ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
H5P_DEFAULT, data_array1);
VRFY((ret == FAIL), "H5Dwrite failed as expected");
VRFY((ret < 0), "H5Dwrite failed as expected");
/* restore auto error reporting */
H5Eset_auto(old_func, old_client_data);
@ -944,31 +944,31 @@ extend_writeInd(char *filename)
dims[0] = DIM1;
dims[1] = DIM2;
ret = H5Dextend (dataset2, dims);
VRFY((ret != FAIL), "H5Dextend succeeded");
VRFY((ret >= 0), "H5Dextend succeeded");
/* create a file dataspace independently */
file_dataspace = H5Dget_space (dataset2);
VRFY((file_dataspace != FAIL), "H5Dget_space succeeded");
VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, NULL);
VRFY((ret != FAIL), "H5Sset_hyperslab succeeded");
VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
/* write data independently */
ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
H5P_DEFAULT, data_array1);
VRFY((ret != FAIL), "H5Dwrite succeeded");
VRFY((ret >= 0), "H5Dwrite succeeded");
/* release resource */
ret=H5Sclose(file_dataspace);
VRFY((ret != FAIL), "H5Sclose succeeded");
VRFY((ret >= 0), "H5Sclose succeeded");
ret=H5Sclose(mem_dataspace);
VRFY((ret != FAIL), "H5Sclose succeeded");
VRFY((ret >= 0), "H5Sclose succeeded");
/* close dataset collectively */
ret=H5Dclose(dataset1);
VRFY((ret != FAIL), "H5Dclose1 succeeded");
VRFY((ret >= 0), "H5Dclose1 succeeded");
ret=H5Dclose(dataset2);
VRFY((ret != FAIL), "H5Dclose2 succeeded");
VRFY((ret >= 0), "H5Dclose2 succeeded");
/* close the file collectively */
H5Fclose(fid);
@ -1012,26 +1012,26 @@ extend_readInd(char *filename)
* -------------------*/
/* setup file access template */
acc_tpl = H5Pcreate (H5P_FILE_ACCESS);
VRFY((acc_tpl != FAIL), "");
VRFY((acc_tpl >= 0), "");
/* set Parallel access with communicator */
ret = H5Pset_mpi(acc_tpl, comm, info);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
/* open the file collectively */
fid=H5Fopen(filename,H5F_ACC_RDONLY,acc_tpl);
VRFY((fid != FAIL), "");
VRFY((fid >= 0), "");
/* Release file-access template */
ret=H5Pclose(acc_tpl);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
/* open the dataset1 collectively */
dataset1 = H5Dopen(fid, DATASETNAME1);
VRFY((dataset1 != FAIL), "");
VRFY((dataset1 >= 0), "");
/* open another dataset collectively */
dataset2 = H5Dopen(fid, DATASETNAME1);
VRFY((dataset2 != FAIL), "");
VRFY((dataset2 >= 0), "");
/* Try extend dataset1 which is open RDONLY. Should fail. */
/* first turn off auto error reporting */
@ -1039,12 +1039,12 @@ extend_readInd(char *filename)
H5Eset_auto(NULL, NULL);
file_dataspace = H5Dget_space (dataset1);
VRFY((file_dataspace != FAIL), "H5Dget_space succeeded");
VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
ret=H5Sget_simple_extent_dims(file_dataspace, dims, NULL);
VRFY((ret > 0), "H5Sget_simple_extent_dims succeeded");
dims[0]++;
ret=H5Dextend(dataset1, dims);
VRFY((ret == FAIL), "H5Dextend failed as expected");
VRFY((ret < 0), "H5Dextend failed as expected");
/* restore auto error reporting */
H5Eset_auto(old_func, old_client_data);
@ -1057,13 +1057,13 @@ extend_readInd(char *filename)
/* create a file dataspace independently */
file_dataspace = H5Dget_space (dataset1);
VRFY((file_dataspace != FAIL), "");
VRFY((file_dataspace >= 0), "");
ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, NULL);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
/* create a memory dataspace independently */
mem_dataspace = H5Screate_simple (RANK, count, NULL);
VRFY((mem_dataspace != FAIL), "");
VRFY((mem_dataspace >= 0), "");
/* fill dataset with test data */
dataset_fill(start, count, stride, &data_origin1[0][0]);
@ -1075,7 +1075,7 @@ extend_readInd(char *filename)
/* read data independently */
ret = H5Dread(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
H5P_DEFAULT, data_array1);
VRFY((ret != FAIL), "H5Dread succeeded");
VRFY((ret >= 0), "H5Dread succeeded");
/* verify the read data with original expected data */
ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
@ -1092,13 +1092,13 @@ extend_readInd(char *filename)
/* create a file dataspace independently */
file_dataspace = H5Dget_space (dataset2);
VRFY((file_dataspace != FAIL), "");
VRFY((file_dataspace >= 0), "");
ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, NULL);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
/* create a memory dataspace independently */
mem_dataspace = H5Screate_simple (RANK, count, NULL);
VRFY((mem_dataspace != FAIL), "");
VRFY((mem_dataspace >= 0), "");
/* fill dataset with test data */
dataset_fill(start, count, stride, &data_origin1[0][0]);
@ -1110,7 +1110,7 @@ extend_readInd(char *filename)
/* read data independently */
ret = H5Dread(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
H5P_DEFAULT, data_array1);
VRFY((ret != FAIL), "H5Dread succeeded");
VRFY((ret >= 0), "H5Dread succeeded");
/* verify the read data with original expected data */
ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
@ -1122,9 +1122,9 @@ extend_readInd(char *filename)
/* close dataset collectively */
ret=H5Dclose(dataset1);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
ret=H5Dclose(dataset2);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
/* close the file collectively */

View File

@ -53,23 +53,23 @@ test_split_comm_access(char *filename[])
/* setup file access template */
acc_tpl = H5Pcreate (H5P_FILE_ACCESS);
VRFY((acc_tpl != FAIL), "");
VRFY((acc_tpl >= 0), "");
/* set Parallel access with communicator */
ret = H5Pset_mpi(acc_tpl, comm, info);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
/* create the file collectively */
fid=H5Fcreate(filename[color],H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl);
VRFY((fid != FAIL), "H5Fcreate succeeded");
VRFY((fid >= 0), "H5Fcreate succeeded");
/* Release file-access template */
ret=H5Pclose(acc_tpl);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
/* close the file */
ret=H5Fclose(fid);
VRFY((ret != FAIL), "");
VRFY((ret >= 0), "");
/* detele the test file */
if (sub_mpi_rank == 0){
@ -80,137 +80,3 @@ test_split_comm_access(char *filename[])
}
/*
* MPIO independent overlapping writes.
*
* First n-1 processes open 1 file.
* Each of the n-1 process writes chunks of data to the file in round-robin
* fashion, in a interleaved but not overlapped fashion. Using increasing
* chunk sizes for the benefits of testing different write sizes and also
* reducing the numbers of writes.
*
* Last process (n-1) just waits.
* First n-1 processes finish writing and cloose the file.
* Last process opens the same file and verifies the data.
*/
#define MPIO_TEST_WRITE_SIZE 1024*1024 /* 1 MB */
void
test_mpio_overlap_writes(char *filename[])
{
int mpi_size, mpi_rank;
MPI_Comm comm;
MPI_Info info = MPI_INFO_NULL;
int color, mrc;
MPI_File fh;
int newrank, newprocs;
hid_t fid; /* file IDs */
hid_t acc_tpl; /* File access properties */
herr_t ret; /* generic return value */
int i;
char buf[4093]; /* use some prime number for size */
int bufsize = sizeof(buf);
int stride;
MPI_Offset mpi_off;
MPI_Status mpi_stat;
if (verbose)
printf("MPIO independent overlapping writes test on file %s\n",
filename[0]);
/* set up MPI parameters */
MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
/* Need at least 2 processes */
VRFY((mpi_size >= 2), "Has at least 2 processes");
/* splits processes 0 to n-2 into one comm. and the last one into another */
color = ((mpi_rank < (mpi_size - 1)) ? 0 : 1);
mrc = MPI_Comm_split (MPI_COMM_WORLD, color, mpi_rank, &comm);
VRFY((mrc==MPI_SUCCESS), "Comm_split succeeded");
if (color==0){
/* First n-1 processes (color==0) open a file and write it */
mrc = MPI_File_open(comm, filename[0], MPI_MODE_CREATE|MPI_MODE_RDWR,
info, &fh);
VRFY((mrc==MPI_SUCCESS), "");
stride = 1;
mpi_off = mpi_rank*stride;
while (mpi_off < MPIO_TEST_WRITE_SIZE){
/* make sure the write does not exceed the TEST_WRITE_SIZE */
if (mpi_off+stride > MPIO_TEST_WRITE_SIZE)
stride = MPIO_TEST_WRITE_SIZE - mpi_off;
/* set data to some trivial pattern for easy verification */
for (i=0; i<stride; i++)
buf[i] = (mpi_off+i) & 0x7f;
mrc = MPI_File_write_at(fh, mpi_off, buf, stride, MPI_BYTE,
&mpi_stat);
VRFY((mrc==MPI_SUCCESS), "");
/* move the offset pointer to last byte written by all processes */
mpi_off += (mpi_size - 1 - mpi_rank) * stride;
/* Increase chunk size without exceeding buffer size. */
/* Then move the starting offset for next write. */
stride *= 2;
if (stride > bufsize)
stride = bufsize;
mpi_off += mpi_rank*stride;
}
/* close file and free the communicator */
mrc = MPI_File_close(&fh);
VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
mrc = MPI_Comm_free(&comm);
VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
/* sync with the other waiting processes */
mrc = MPI_Barrier(MPI_COMM_WORLD);
VRFY((mrc==MPI_SUCCESS), "Sync after writes");
}else{
/* last process waits till writes are done,
* then opens file to verify data.
*/
mrc = MPI_Barrier(MPI_COMM_WORLD);
VRFY((mrc==MPI_SUCCESS), "Sync after writes");
mrc = MPI_File_open(comm, filename[0], MPI_MODE_RDONLY,
info, &fh);
VRFY((mrc==MPI_SUCCESS), "");
stride = bufsize;
for (mpi_off=0; mpi_off < MPIO_TEST_WRITE_SIZE; mpi_off += bufsize){
/* make sure it does not read beyond end of data */
if (mpi_off+stride > MPIO_TEST_WRITE_SIZE)
stride = MPIO_TEST_WRITE_SIZE - mpi_off;
mrc = MPI_File_read_at(fh, mpi_off, buf, stride, MPI_BYTE,
&mpi_stat);
VRFY((mrc==MPI_SUCCESS), "");
for (i=0; i<stride; i++){
if (buf[i] != ((mpi_off+i) & 0x7f))
printf("proc %d: found data error at [%d], expect %d, got %d\n",
mpi_rank, mpi_off+i, mpi_off & 0x7f, buf[0]);
}
}
/* close file and free the communicator */
mrc = MPI_File_close(&fh);
VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
mrc = MPI_Comm_free(&comm);
VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
}
/*
* one more sync to ensure all processes have done reading
* before ending this test.
*/
mrc = MPI_Barrier(MPI_COMM_WORLD);
VRFY((mrc==MPI_SUCCESS), "Sync before leaving test");
}

135
testpar/t_mpi.c Normal file
View File

@ -0,0 +1,135 @@
/*
* MPIO independent overlapping writes.
*
* First n-1 processes open 1 file.
* Each of the n-1 process writes chunks of data to the file in round-robin
* fashion, in a interleaved but not overlapped fashion. Using increasing
* chunk sizes for the benefits of testing different write sizes and also
* reducing the numbers of writes.
*
* Last process (n-1) just waits.
* First n-1 processes finish writing and cloose the file.
* Last process opens the same file and verifies the data.
*/
#include <testphdf5.h>
#define MPIO_TEST_WRITE_SIZE 1024*1024 /* 1 MB */
void
test_mpio_overlap_writes(char *filename[])
{
int mpi_size, mpi_rank;
MPI_Comm comm;
MPI_Info info = MPI_INFO_NULL;
int color, mrc;
MPI_File fh;
int newrank, newprocs;
hid_t fid; /* file IDs */
hid_t acc_tpl; /* File access properties */
herr_t ret; /* generic return value */
int i;
char buf[4093]; /* use some prime number for size */
int bufsize = sizeof(buf);
int stride;
MPI_Offset mpi_off;
MPI_Status mpi_stat;
if (verbose)
printf("MPIO independent overlapping writes test on file %s\n",
filename[0]);
/* set up MPI parameters */
MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
/* Need at least 2 processes */
VRFY((mpi_size >= 2), "Has at least 2 processes");
/* splits processes 0 to n-2 into one comm. and the last one into another */
color = ((mpi_rank < (mpi_size - 1)) ? 0 : 1);
mrc = MPI_Comm_split (MPI_COMM_WORLD, color, mpi_rank, &comm);
VRFY((mrc==MPI_SUCCESS), "Comm_split succeeded");
if (color==0){
/* First n-1 processes (color==0) open a file and write it */
mrc = MPI_File_open(comm, filename[0], MPI_MODE_CREATE|MPI_MODE_RDWR,
info, &fh);
VRFY((mrc==MPI_SUCCESS), "");
stride = 1;
mpi_off = mpi_rank*stride;
while (mpi_off < MPIO_TEST_WRITE_SIZE){
/* make sure the write does not exceed the TEST_WRITE_SIZE */
if (mpi_off+stride > MPIO_TEST_WRITE_SIZE)
stride = MPIO_TEST_WRITE_SIZE - mpi_off;
/* set data to some trivial pattern for easy verification */
for (i=0; i<stride; i++)
buf[i] = (mpi_off+i) & 0x7f;
mrc = MPI_File_write_at(fh, mpi_off, buf, stride, MPI_BYTE,
&mpi_stat);
VRFY((mrc==MPI_SUCCESS), "");
/* move the offset pointer to last byte written by all processes */
mpi_off += (mpi_size - 1 - mpi_rank) * stride;
/* Increase chunk size without exceeding buffer size. */
/* Then move the starting offset for next write. */
stride *= 2;
if (stride > bufsize)
stride = bufsize;
mpi_off += mpi_rank*stride;
}
/* close file and free the communicator */
mrc = MPI_File_close(&fh);
VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
mrc = MPI_Comm_free(&comm);
VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
/* sync with the other waiting processes */
mrc = MPI_Barrier(MPI_COMM_WORLD);
VRFY((mrc==MPI_SUCCESS), "Sync after writes");
}else{
/* last process waits till writes are done,
* then opens file to verify data.
*/
mrc = MPI_Barrier(MPI_COMM_WORLD);
VRFY((mrc==MPI_SUCCESS), "Sync after writes");
mrc = MPI_File_open(comm, filename[0], MPI_MODE_RDONLY,
info, &fh);
VRFY((mrc==MPI_SUCCESS), "");
stride = bufsize;
for (mpi_off=0; mpi_off < MPIO_TEST_WRITE_SIZE; mpi_off += bufsize){
/* make sure it does not read beyond end of data */
if (mpi_off+stride > MPIO_TEST_WRITE_SIZE)
stride = MPIO_TEST_WRITE_SIZE - mpi_off;
mrc = MPI_File_read_at(fh, mpi_off, buf, stride, MPI_BYTE,
&mpi_stat);
VRFY((mrc==MPI_SUCCESS), "");
for (i=0; i<stride; i++){
if (buf[i] != ((mpi_off+i) & 0x7f))
printf("proc %d: found data error at [%d], expect %d, got %d\n",
mpi_rank, mpi_off+i, mpi_off & 0x7f, buf[0]);
}
}
/* close file and free the communicator */
mrc = MPI_File_close(&fh);
VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
mrc = MPI_Comm_free(&comm);
VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
}
/*
* one more sync to ensure all processes have done reading
* before ending this test.
*/
mrc = MPI_Barrier(MPI_COMM_WORLD);
VRFY((mrc==MPI_SUCCESS), "Sync before leaving test");
}

View File

@ -197,14 +197,14 @@ main(int argc, char **argv)
}
if (dowrite){
MPI_BANNER("testing dataset using split communicators...");
test_split_comm_access(filenames);
#ifdef MPIOTEST
#ifndef MPIOTEST
MPI_BANNER("testing MPIO independent overlapping writes...");
test_mpio_overlap_writes(filenames);
#endif
MPI_BANNER("testing dataset using split communicators...");
test_split_comm_access(filenames);
MPI_BANNER("testing dataset independent write...");
dataset_writeInd(filenames[0]);