aboutsummaryrefslogtreecommitdiff
path: root/src/IOspeed.cc
diff options
context:
space:
mode:
authortradke <tradke@21a6bef8-4479-4f54-8f8d-0db94a2919ef>2000-09-13 13:49:13 +0000
committertradke <tradke@21a6bef8-4479-4f54-8f8d-0db94a2919ef>2000-09-13 13:49:13 +0000
commit8fe367ecf2cbda79960a68a052fdb84916427c0e (patch)
tree45c017765ab7f0eb6caf97540fc76ffd3bffba59 /src/IOspeed.cc
parentc490022d592551af7c29bc960cbbc09daf45972d (diff)
Importing latest stuff from development repository
git-svn-id: http://svn.cactuscode.org/arrangements/CactusExternal/FlexIO/trunk@2 21a6bef8-4479-4f54-8f8d-0db94a2919ef
Diffstat (limited to 'src/IOspeed.cc')
-rw-r--r--src/IOspeed.cc183
1 files changed, 183 insertions, 0 deletions
diff --git a/src/IOspeed.cc b/src/IOspeed.cc
new file mode 100644
index 0000000..a0003e4
--- /dev/null
+++ b/src/IOspeed.cc
@@ -0,0 +1,183 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/times.h>
+#include <limits.h>
+#include <time.h>
+#include "Arch.h"
+#include "IO.hh"
+#include "IEEEIO.hh"
+#include "HDFIO.hh"
+#include "FlexArrayTmpl.H"
+
+#define f_openf77 F77NAME(openf77_,openf77,OPENF77)
+#define f_writef77 F77NAME(writef77_,writef77,WRITEF77)
+#define f_closef77 F77NAME(closef77_,closef77,CLOSEF77)
+extern "C" {
+void f_openf77();
+void f_writef77(double *data);
+void f_closef77();
+}
+
+//typedef FlexArray<float> FloatVector;
+//
+//class fVectorStatistics : public FloatVector {
+// fVectorStatistics(int sz=0):FloatVector(sz){}
+//};
+
+struct ResultRecord {
+ float usertime,systemtime,realtime,combined,nbytes,megs_per_second;
+ // ResultRecord():usertime(0),systemtime(0),realtime(0),
+ // combined(0),nbytes(0),megs_per_second(0){}
+};
+
+#define ClearLine fprintf(stderr,"\r \r")
+
+struct ResultRecordList {
+ FlexArray<ResultRecord> results;
+ ResultRecord average_results;
+ ResultRecordList(){}
+ void append(ResultRecord &rec);
+ ResultRecord &operator[](int index){
+ return results[index];
+ }
+
+};
+
+void ResultRecordList::append(ResultRecord &rec){
+ int idx=results.getSize();
+ float nrecs=(float)idx;
+ results.append(rec);
+ average_results.usertime=(average_results.usertime*nrecs+rec.usertime)/(nrecs+1);
+ average_results.systemtime=(average_results.systemtime*nrecs+rec.systemtime)/(nrecs+1);
+ average_results.realtime=(average_results.realtime*nrecs+rec.realtime)/(nrecs+1);
+ average_results.combined=(average_results.combined*nrecs+rec.combined)/(nrecs+1);
+ average_results.nbytes=(average_results.nbytes*nrecs+rec.nbytes)/(nrecs+1);
+ rec.megs_per_second = (double)(rec.nbytes)/(1024.0L*1024.0L*(double)rec.realtime);
+ 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};
+ int i,nds;
+ int ntests;
+ struct tms stms,etms;
+ struct timeval stmv,etmv;
+ double srt,ert;
+ ResultRecordList ieeeio_results,f77_results,hdf_results;
+
+ if(argc>1){
+ ntests=atoi(argv[1]);
+ printf("Ntests=%u\n",ntests);
+ }
+ else {
+ ntests=1;
+ }
+
+ for(int tst=0;tst<ntests;tst++){
+ ResultRecord results;
+
+ printf("\nTrial %u --------------\n",tst); // next line
+ puts("--------------IEEE--------------");
+ for(i=0,nds=5;i<8;i++,nds+=5){
+ fprintf(stderr,"IEEEIO <open speed.raw> ");
+ times(&stms);
+ gettimeofday(&stmv);
+ IObase *file = new IEEEIO("speed.raw",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);
+ 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.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));
+ ieeeio_results.append(results);
+ }
+ puts("--------------HDF---------------");
+ for(i=0,nds=5;i<8;i++,nds+=5){
+ fprintf(stderr,"HDF <open speed.hdf> ");
+ times(&stms);
+ gettimeofday(&stmv);
+ IObase *file = new HDFIO("speed.hdf",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);
+ 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.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));
+ hdf_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);
+ f_openf77();
+ fprintf(stderr,"Write %2u datasets:",nds);
+ for(int n=0;n<nds;n++){
+ fprintf(stderr,"*");
+ f_writef77(data);
+ }
+ f_closef77();
+ gettimeofday(&etmv);
+ 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.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));
+ f77_results.append(results);
+ }
+ }
+
+ // Now for all of the results
+ printf("-------IEEE: Average of %u trials------------\n",ntests);
+ printf("\tRealtime=%f, UserTime=%f, SystemTime=%f, Combined=%f Megs/sec=%f\n",
+ ieeeio_results.average_results.realtime,
+ ieeeio_results.average_results.usertime,
+ 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("\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("-------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,
+ f77_results.average_results.usertime,
+ f77_results.average_results.systemtime,
+ f77_results.average_results.combined,
+ f77_results.average_results.megs_per_second);
+}
+
+