From 0fbecb8599b29995171a260fd5fa1c50cd0ceffb Mon Sep 17 00:00:00 2001 From: Albert Cheng Date: Tue, 2 Jul 2002 02:55:32 -0500 Subject: [svn-r5752] Purpose: Bug fix Description: POSIX contigous pattern error corrected. Added detection if xfer buffer is actually too big. Added environment variables settings in help page. Platforms tested: modi4 pp --- perform/pio_engine.c | 39 ++++++++++++++++++++++++++++----------- perform/pio_perf.c | 4 ++++ 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/perform/pio_engine.c b/perform/pio_engine.c index 057bfcb..34efd7e 100644 --- a/perform/pio_engine.c +++ b/perform/pio_engine.c @@ -223,12 +223,12 @@ do_pio(parameters param) HDfprintf(stderr, "Transfer block size (%Hd) must be > 0\n", (long_long)blk_size); GOTOERROR(FAIL); - } /* end if */ + } if(buf_size<=0) { HDfprintf(stderr, "Transfer buffer size (%Hd) must be > 0\n", (long_long)buf_size); GOTOERROR(FAIL); - } /* end if */ + } if ((buf_size % blk_size) != 0){ HDfprintf(stderr, "Transfer buffer size (%Hd) must be a multiple of the " @@ -236,13 +236,20 @@ do_pio(parameters param) (long_long)buf_size, (long_long)blk_size); GOTOERROR(FAIL); } - if((nbytes%buf_size)!=0) { + if((nbytes%pio_mpi_nprocs_g)!=0) { HDfprintf(stderr, "Dataset size (%Hd) must be a multiple of the " + "number of processes (%d)\n", + (long_long)nbytes, pio_mpi_nprocs_g); + GOTOERROR(FAIL); + } + if(((nbytes/pio_mpi_nprocs_g)%buf_size)!=0) { + HDfprintf(stderr, + "Dataset size/process (%Hd) must be a multiple of the " "trasfer buffer size (%Hd)\n", - (long_long)nbytes, (long_long)buf_size); + (long_long)(nbytes/pio_mpi_nprocs_g), (long_long)buf_size); GOTOERROR(FAIL); - } /* end if */ + } /* Allocate transfer buffer */ if ((buffer = malloc(buf_size)) == NULL){ @@ -731,7 +738,12 @@ do_write(results *res, file_descr *fd, parameters *parms, long ndsets, /* Contiguous pattern */ if (parms->interleaved==0) { /* Compute file offset */ - file_offset = posix_file_offset + (off_t)buf_size; + file_offset = posix_file_offset + (off_t)nbytes_xfer; + + /* bytes to transfer this time */ + nbytes_toxfer = bytes_count - nbytes_xfer; + if (nbytes_toxfer > buf_size) + nbytes_toxfer = buf_size; /* only care if seek returns error */ rc = POSIXSEEK(fd->posixfd, file_offset) < 0 ? -1 : 0; @@ -739,11 +751,11 @@ do_write(results *res, file_descr *fd, parameters *parms, long ndsets, /* check if all bytes are written */ rc = ((ssize_t)buf_size == - POSIXWRITE(fd->posixfd, buffer, buf_size)); + POSIXWRITE(fd->posixfd, buffer, nbytes_toxfer)); VRFY((rc != 0), "POSIXWRITE"); /* Advance global offset in dataset */ - nbytes_xfer+=buf_size; + nbytes_xfer+=nbytes_toxfer; } /* end if */ /* Interleaved access pattern */ else { @@ -1181,7 +1193,12 @@ do_read(results *res, file_descr *fd, parameters *parms, long ndsets, /* Contiguous pattern */ if (parms->interleaved==0) { /* Compute file offset */ - file_offset = posix_file_offset + (off_t)buf_size; + file_offset = posix_file_offset + (off_t)nbytes_xfer; + + /* bytes to transfer this time */ + nbytes_toxfer = bytes_count - nbytes_xfer; + if (nbytes_toxfer > buf_size) + nbytes_toxfer = buf_size; /* only care if seek returns error */ rc = POSIXSEEK(fd->posixfd, file_offset) < 0 ? -1 : 0; @@ -1189,11 +1206,11 @@ do_read(results *res, file_descr *fd, parameters *parms, long ndsets, /* check if all bytes are written */ rc = ((ssize_t)buf_size == - POSIXREAD(fd->posixfd, buffer, buf_size)); + POSIXREAD(fd->posixfd, buffer, nbytes_toxfer)); VRFY((rc != 0), "POSIXREAD"); /* Advance global offset in dataset */ - nbytes_xfer+=buf_size; + nbytes_xfer+=nbytes_toxfer; } /* end if */ /* Interleaved access pattern */ else { diff --git a/perform/pio_perf.c b/perform/pio_perf.c index cc86c83..0654378 100644 --- a/perform/pio_perf.c +++ b/perform/pio_perf.c @@ -1405,6 +1405,10 @@ usage(const char *prog) printf("\n"); printf(" Example: --debug=2,r,t\n"); printf("\n"); + printf(" Environment variables:\n"); + printf(" HDF5_NOCLEANUP Do not remove data files if set [default remove]\n"); + printf(" HDF5_MPI_INFO MPI INFO object key=value separated by ;\n"); + printf(" HDF5_PARAPREFIX Paralllel data files prefix\n"); fflush(stdout); } } -- cgit v0.12