summaryrefslogtreecommitdiffstats
path: root/testpar/t_file.c
diff options
context:
space:
mode:
authorAlbert Cheng <acheng@hdfgroup.org>1999-02-17 04:39:22 (GMT)
committerAlbert Cheng <acheng@hdfgroup.org>1999-02-17 04:39:22 (GMT)
commita3a9df36579a76bece85ec8e59b285b7a25e676b (patch)
tree21c245e3c3e6ac9a1e11a1496b5dfec877d92c50 /testpar/t_file.c
parent8ed6e885439d7acd4f68e078b1f3dc221e15fc0b (diff)
downloadhdf5-a3a9df36579a76bece85ec8e59b285b7a25e676b.zip
hdf5-a3a9df36579a76bece85ec8e59b285b7a25e676b.tar.gz
hdf5-a3a9df36579a76bece85ec8e59b285b7a25e676b.tar.bz2
[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.
Diffstat (limited to 'testpar/t_file.c')
-rw-r--r--testpar/t_file.c144
1 files changed, 5 insertions, 139 deletions
diff --git a/testpar/t_file.c b/testpar/t_file.c
index c615663..737e107 100644
--- a/testpar/t_file.c
+++ b/testpar/t_file.c
@@ -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");
-}
-