diff options
Diffstat (limited to 'src/IOspeed.cc')
-rw-r--r-- | src/IOspeed.cc | 85 |
1 files changed, 65 insertions, 20 deletions
diff --git a/src/IOspeed.cc b/src/IOspeed.cc index a0003e4..832e82c 100644 --- a/src/IOspeed.cc +++ b/src/IOspeed.cc @@ -1,5 +1,6 @@ #include <stdio.h> #include <stdlib.h> +#include <sys/time.h> #include <sys/types.h> #include <sys/times.h> #include <limits.h> @@ -8,6 +9,7 @@ #include "IO.hh" #include "IEEEIO.hh" #include "HDFIO.hh" +#include "H5IO.hh" #include "FlexArrayTmpl.H" #define f_openf77 F77NAME(openf77_,openf77,OPENF77) @@ -57,15 +59,22 @@ void ResultRecordList::append(ResultRecord &rec){ average_results.megs_per_second = (average_results.megs_per_second*nrecs+rec.megs_per_second)/(nrecs+1); } -void main(int argc,char *argv[]){ - double data[64*64*64]; - int dims[3]={64,64,64}; +double ComputeRealTime(timeval &etmv,timeval &stmv){ + double t = (double)(etmv.tv_sec-stmv.tv_sec); + double mt = (double)(etmv.tv_usec - stmv.tv_usec); + mt /= 1000000.0L; + return t+mt; +} + +int main(int argc,char *argv[]){ + double *data; + int dims[3]={128,128,128}; int i,nds; int ntests; struct tms stms,etms; struct timeval stmv,etmv; double srt,ert; - ResultRecordList ieeeio_results,f77_results,hdf_results; + ResultRecordList ieeeio_results,f77_results,hdf_results,h5_results; if(argc>1){ ntests=atoi(argv[1]); @@ -74,6 +83,11 @@ void main(int argc,char *argv[]){ else { ntests=1; } + data = new double[dims[0]*dims[1]*dims[2]]; + if(!data){ + perror("malloc failed"); + exit(0); + } for(int tst=0;tst<ntests;tst++){ ResultRecord results; @@ -83,7 +97,7 @@ void main(int argc,char *argv[]){ for(i=0,nds=5;i<8;i++,nds+=5){ fprintf(stderr,"IEEEIO <open speed.raw> "); times(&stms); - gettimeofday(&stmv); + gettimeofday(&stmv,0); IObase *file = new IEEEIO("speed.raw",IObase::Write); fprintf(stderr,"Write %2u datasets:",nds); for(int n=0;n<nds;n++){ @@ -91,12 +105,10 @@ void main(int argc,char *argv[]){ file->write(IObase::Float64,3,dims,data); } delete file; - gettimeofday(&etmv); + gettimeofday(&etmv,0); times(&etms); // times after close to account for buffer flushing puts(""); - ert=(double)etmv.tv_sec + (double)etmv.tv_usec/1000000.0L; - srt=(double)stmv.tv_sec + (double)stmv.tv_usec/1000000.0L; - results.realtime = ert-srt; + results.realtime = ComputeRealTime(etmv,stmv); results.usertime = (float)(etms.tms_utime-stms.tms_utime)/CLK_TCK; results.systemtime = (float)(etms.tms_stime-stms.tms_stime)/CLK_TCK; results.combined = (float)(etms.tms_utime-stms.tms_utime+ @@ -104,11 +116,11 @@ void main(int argc,char *argv[]){ results.nbytes = (float)(nds*IObase::nBytes(IObase::Float64,3,dims)); ieeeio_results.append(results); } - puts("--------------HDF---------------"); + puts("--------------HDF4--------------"); for(i=0,nds=5;i<8;i++,nds+=5){ fprintf(stderr,"HDF <open speed.hdf> "); times(&stms); - gettimeofday(&stmv); + gettimeofday(&stmv,0); IObase *file = new HDFIO("speed.hdf",IObase::Write); fprintf(stderr,"Write %2u datasets:",nds); for(int n=0;n<nds;n++){ @@ -116,12 +128,10 @@ void main(int argc,char *argv[]){ file->write(IObase::Float64,3,dims,data); } delete file; - gettimeofday(&etmv); + gettimeofday(&etmv,0); times(&etms); // times after close to account for buffer flushing puts(""); - ert=(double)etmv.tv_sec + (double)etmv.tv_usec/1000000.0L; - srt=(double)stmv.tv_sec + (double)stmv.tv_usec/1000000.0L; - results.realtime = ert-srt; + results.realtime = ComputeRealTime(etmv,stmv); results.usertime = (float)(etms.tms_utime-stms.tms_utime)/CLK_TCK; results.systemtime = (float)(etms.tms_stime-stms.tms_stime)/CLK_TCK; results.combined = (float)(etms.tms_utime-stms.tms_utime+ @@ -129,11 +139,36 @@ void main(int argc,char *argv[]){ results.nbytes = (float)(nds*IObase::nBytes(IObase::Float64,3,dims)); hdf_results.append(results); } + puts("--------------HDF5--------------"); + for(i=0,nds=5;i<8;i++,nds+=5){ + fprintf(stderr,"HDF5 <open speed.h5> "); + times(&stms); + gettimeofday(&stmv,0); + IObase *file = new H5IO("speed.h5",IObase::Write); + fprintf(stderr,"Write %2u datasets:",nds); + for(int n=0;n<nds;n++){ + fprintf(stderr,"*"); + file->write(IObase::Float64,3,dims,data); + } + delete file; + gettimeofday(&etmv,0); + times(&etms); // times after close to account for buffer flushing + puts(""); + ert=(double)etmv.tv_sec + (double)etmv.tv_usec/1000000.0L; + srt=(double)stmv.tv_sec + (double)stmv.tv_usec/1000000.0L; + results.realtime = ComputeRealTime(etmv,stmv); + results.usertime = (float)(etms.tms_utime-stms.tms_utime)/CLK_TCK; + results.systemtime = (float)(etms.tms_stime-stms.tms_stime)/CLK_TCK; + results.combined = (float)(etms.tms_utime-stms.tms_utime+ + etms.tms_stime-stms.tms_stime)/CLK_TCK; + results.nbytes = (float)(nds*IObase::nBytes(IObase::Float64,3,dims)); + h5_results.append(results); + } puts("-------------F77 Unformatted---------------"); for(i=0,nds=5;i<8;i++,nds+=5){ fprintf(stderr,"F77 Unf <open f77speed.unf> "); times(&stms); - gettimeofday(&stmv); + gettimeofday(&stmv,0); f_openf77(); fprintf(stderr,"Write %2u datasets:",nds); for(int n=0;n<nds;n++){ @@ -141,12 +176,12 @@ void main(int argc,char *argv[]){ f_writef77(data); } f_closef77(); - gettimeofday(&etmv); + gettimeofday(&etmv,0); times(&etms); // times after close to account for buffer flushing puts(""); ert=(double)etmv.tv_sec + (double)etmv.tv_usec/1000000.0L; srt=(double)stmv.tv_sec + (double)stmv.tv_usec/1000000.0L; - results.realtime = ert-srt; + results.realtime = ComputeRealTime(etmv,stmv); results.usertime = (float)(etms.tms_utime-stms.tms_utime)/CLK_TCK; results.systemtime = (float)(etms.tms_stime-stms.tms_stime)/CLK_TCK; results.combined = (float)(etms.tms_utime-stms.tms_utime+ @@ -164,13 +199,23 @@ void main(int argc,char *argv[]){ ieeeio_results.average_results.systemtime, ieeeio_results.average_results.combined, ieeeio_results.average_results.megs_per_second); - printf("-------HDF: Average of %u trials------------\n",ntests); + + printf("-------HDF4: Average of %u trials------------\n",ntests); printf("\tRealtime=%f, UserTime=%f, SystemTime=%f, Combined=%f Megs/sec=%f\n", hdf_results.average_results.realtime, hdf_results.average_results.usertime, hdf_results.average_results.systemtime, hdf_results.average_results.combined, hdf_results.average_results.megs_per_second); + + printf("-------HDF5: Average of %u trials------------\n",ntests); + printf("\tRealtime=%f, UserTime=%f, SystemTime=%f, Combined=%f Megs/sec=%f\n", + h5_results.average_results.realtime, + h5_results.average_results.usertime, + h5_results.average_results.systemtime, + h5_results.average_results.combined, + h5_results.average_results.megs_per_second); + printf("-------F77 UNF: Average of %u trials------------\n",ntests); printf("\tRealtime=%f, UserTime=%f, SystemTime=%f, Combined=%f Megs/sec=%f\n", f77_results.average_results.realtime, @@ -178,6 +223,6 @@ void main(int argc,char *argv[]){ f77_results.average_results.systemtime, f77_results.average_results.combined, f77_results.average_results.megs_per_second); +return 1; } - |