aboutsummaryrefslogtreecommitdiff
path: root/src/IOspeed.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/IOspeed.cc')
-rw-r--r--src/IOspeed.cc85
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;
}
-