[llvm-commits] [test-suite] r53497 - in /test-suite/trunk/SingleSource/Benchmarks: Himeno/ Himeno/Makefile Himeno/himenobmtxpa.c Makefile
Owen Anderson
resistor at mac.com
Fri Jul 11 16:49:40 PDT 2008
Author: resistor
Date: Fri Jul 11 18:49:40 2008
New Revision: 53497
URL: http://llvm.org/viewvc/llvm-project?rev=53497&view=rev
Log:
Add the Himeno floating point benchmark, which actually appear to do well on (1.82 GCC/LLC).
Added:
test-suite/trunk/SingleSource/Benchmarks/Himeno/
test-suite/trunk/SingleSource/Benchmarks/Himeno/Makefile
test-suite/trunk/SingleSource/Benchmarks/Himeno/himenobmtxpa.c
Modified:
test-suite/trunk/SingleSource/Benchmarks/Makefile
Added: test-suite/trunk/SingleSource/Benchmarks/Himeno/Makefile
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/SingleSource/Benchmarks/Himeno/Makefile?rev=53497&view=auto
==============================================================================
--- test-suite/trunk/SingleSource/Benchmarks/Himeno/Makefile (added)
+++ test-suite/trunk/SingleSource/Benchmarks/Himeno/Makefile Fri Jul 11 18:49:40 2008
@@ -0,0 +1,3 @@
+LEVEL = ../../..
+
+include $(LEVEL)/SingleSource/Makefile.singlesrc
Added: test-suite/trunk/SingleSource/Benchmarks/Himeno/himenobmtxpa.c
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/SingleSource/Benchmarks/Himeno/himenobmtxpa.c?rev=53497&view=auto
==============================================================================
--- test-suite/trunk/SingleSource/Benchmarks/Himeno/himenobmtxpa.c (added)
+++ test-suite/trunk/SingleSource/Benchmarks/Himeno/himenobmtxpa.c Fri Jul 11 18:49:40 2008
@@ -0,0 +1,315 @@
+/********************************************************************
+
+ This benchmark test program is measuring a cpu performance
+ of floating point operation by a Poisson equation solver.
+
+ If you have any question, please ask me via email.
+ written by Ryutaro HIMENO, November 26, 2001.
+ Version 3.0
+ ----------------------------------------------
+ Ryutaro Himeno, Dr. of Eng.
+ Head of Computer Information Division,
+ RIKEN (The Institute of Pysical and Chemical Research)
+ Email : himeno at postman.riken.go.jp
+ ---------------------------------------------------------------
+ You can adjust the size of this benchmark code to fit your target
+ computer. In that case, please chose following sets of
+ [mimax][mjmax][mkmax]:
+ small : 33,33,65
+ small : 65,65,129
+ midium: 129,129,257
+ large : 257,257,513
+ ext.large: 513,513,1025
+ This program is to measure a computer performance in MFLOPS
+ by using a kernel which appears in a linear solver of pressure
+ Poisson eq. which appears in an incompressible Navier-Stokes solver.
+ A point-Jacobi method is employed in this solver as this method can
+ be easyly vectrized and be parallelized.
+ ------------------
+ Finite-difference method, curvilinear coodinate system
+ Vectorizable and parallelizable on each grid point
+ No. of grid points : imax x jmax x kmax including boundaries
+ ------------------
+ A,B,C:coefficient matrix, wrk1: source term of Poisson equation
+ wrk2 : working area, OMEGA : relaxation parameter
+ BND:control variable for boundaries and objects ( = 0 or 1)
+ P: pressure
+********************************************************************/
+
+#include <stdio.h>
+#include <sys/time.h>
+
+#define MR(mt,n,r,c,d) mt->m[(n) * mt->mrows * mt->mcols * mt->mdeps + (r) * mt->mcols* mt->mdeps + (c) * mt->mdeps + (d)]
+
+struct Mat {
+ float* m;
+ int mnums;
+ int mrows;
+ int mcols;
+ int mdeps;
+};
+
+/* prototypes */
+typedef struct Mat Matrix;
+
+int newMat(Matrix* Mat, int mnums, int mrows, int mcols, int mdeps);
+void clearMat(Matrix* Mat);
+void set_param(int i[],char *size);
+void mat_set(Matrix* Mat,int l,float z);
+void mat_set_init(Matrix* Mat);
+float jacobi(int n,Matrix* M1,Matrix* M2,Matrix* M3,
+ Matrix* M4,Matrix* M5,Matrix* M6,Matrix* M7);
+double fflop(int,int,int);
+double mflops(int,double,double);
+double second();
+
+float omega=0.8;
+Matrix a,b,c,p,bnd,wrk1,wrk2;
+
+int
+main(int argc, char *argv[])
+{
+ int i,j,k,nn;
+ int imax,jmax,kmax,mimax,mjmax,mkmax,msize[3];
+ float gosa;
+ double cpu0,cpu1,cpu,flop;
+
+ // hardcode to S size
+ msize[0]= 64;
+ msize[1]= 64;
+ msize[2]= 128;
+
+ mimax= msize[0];
+ mjmax= msize[1];
+ mkmax= msize[2];
+ imax= mimax-1;
+ jmax= mjmax-1;
+ kmax= mkmax-1;
+
+ printf("mimax = %d mjmax = %d mkmax = %d\n",mimax,mjmax,mkmax);
+ printf("imax = %d jmax = %d kmax =%d\n",imax,jmax,kmax);
+
+ /*
+ * Initializing matrixes
+ */
+ newMat(&p,1,mimax,mjmax,mkmax);
+ newMat(&bnd,1,mimax,mjmax,mkmax);
+ newMat(&wrk1,1,mimax,mjmax,mkmax);
+ newMat(&wrk2,1,mimax,mjmax,mkmax);
+ newMat(&a,4,mimax,mjmax,mkmax);
+ newMat(&b,3,mimax,mjmax,mkmax);
+ newMat(&c,3,mimax,mjmax,mkmax);
+
+ mat_set_init(&p);
+ mat_set(&bnd,0,1.0);
+ mat_set(&wrk1,0,0.0);
+ mat_set(&wrk2,0,0.0);
+ mat_set(&a,0,1.0);
+ mat_set(&a,1,1.0);
+ mat_set(&a,2,1.0);
+ mat_set(&a,3,1.0/6.0);
+ mat_set(&b,0,0.0);
+ mat_set(&b,1,0.0);
+ mat_set(&b,2,0.0);
+ mat_set(&c,0,1.0);
+ mat_set(&c,1,1.0);
+ mat_set(&c,2,1.0);
+
+ /*
+ * Start measuring
+ */
+ nn= 64;
+
+ gosa = jacobi(nn,&a,&b,&c,&p,&bnd,&wrk1,&wrk2);
+
+ printf(" Loop executed for %d times\n",nn);
+ printf(" Gosa : %e \n",gosa);
+
+ /*
+ * Matrix free
+ */
+ clearMat(&p);
+ clearMat(&bnd);
+ clearMat(&wrk1);
+ clearMat(&wrk2);
+ clearMat(&a);
+ clearMat(&b);
+ clearMat(&c);
+
+ return (0);
+}
+
+double
+fflop(int mx,int my, int mz)
+{
+ return((double)(mz-2)*(double)(my-2)*(double)(mx-2)*34.0);
+}
+
+double
+mflops(int nn,double cpu,double flop)
+{
+ return(flop/cpu*1.e-6*(double)nn);
+}
+
+void
+set_param(int is[],char *size)
+{
+ if(!strcmp(size,"XS") || !strcmp(size,"xs")){
+ is[0]= 32;
+ is[1]= 32;
+ is[2]= 64;
+ return;
+ }
+ if(!strcmp(size,"S") || !strcmp(size,"s")){
+ is[0]= 64;
+ is[1]= 64;
+ is[2]= 128;
+ return;
+ }
+ if(!strcmp(size,"M") || !strcmp(size,"m")){
+ is[0]= 128;
+ is[1]= 128;
+ is[2]= 256;
+ return;
+ }
+ if(!strcmp(size,"L") || !strcmp(size,"l")){
+ is[0]= 256;
+ is[1]= 256;
+ is[2]= 512;
+ return;
+ }
+ if(!strcmp(size,"XL") || !strcmp(size,"xl")){
+ is[0]= 512;
+ is[1]= 512;
+ is[2]= 1024;
+ return;
+ } else {
+ printf("Invalid input character !!\n");
+ exit(6);
+ }
+}
+
+int
+newMat(Matrix* Mat, int mnums,int mrows, int mcols, int mdeps)
+{
+ Mat->mnums= mnums;
+ Mat->mrows= mrows;
+ Mat->mcols= mcols;
+ Mat->mdeps= mdeps;
+ Mat->m= NULL;
+ Mat->m= (float*)
+ malloc(mnums * mrows * mcols * mdeps * sizeof(float));
+
+ return(Mat->m != NULL) ? 1:0;
+}
+
+void
+clearMat(Matrix* Mat)
+{
+ if(Mat->m)
+ free(Mat->m);
+ Mat->m= NULL;
+ Mat->mnums= 0;
+ Mat->mcols= 0;
+ Mat->mrows= 0;
+ Mat->mdeps= 0;
+}
+
+void
+mat_set(Matrix* Mat, int l, float val)
+{
+ int i,j,k;
+
+ for(i=0; i<Mat->mrows; i++)
+ for(j=0; j<Mat->mcols; j++)
+ for(k=0; k<Mat->mdeps; k++)
+ MR(Mat,l,i,j,k)= val;
+}
+
+void
+mat_set_init(Matrix* Mat)
+{
+ int i,j,k,l;
+ float tt;
+
+ for(i=0; i<Mat->mrows; i++)
+ for(j=0; j<Mat->mcols; j++)
+ for(k=0; k<Mat->mdeps; k++)
+ MR(Mat,0,i,j,k)= (float)(i*i)
+ /(float)((Mat->mrows - 1)*(Mat->mrows - 1));
+}
+
+float
+jacobi(int nn, Matrix* a,Matrix* b,Matrix* c,
+ Matrix* p,Matrix* bnd,Matrix* wrk1,Matrix* wrk2)
+{
+ int i,j,k,n,imax,jmax,kmax;
+ float gosa,s0,ss;
+
+ imax= p->mrows-1;
+ jmax= p->mcols-1;
+ kmax= p->mdeps-1;
+
+ for(n=0 ; n<nn ; n++){
+ gosa = 0.0;
+
+ for(i=1 ; i<imax; i++)
+ for(j=1 ; j<jmax ; j++)
+ for(k=1 ; k<kmax ; k++){
+ s0= MR(a,0,i,j,k)*MR(p,0,i+1,j, k)
+ + MR(a,1,i,j,k)*MR(p,0,i, j+1,k)
+ + MR(a,2,i,j,k)*MR(p,0,i, j, k+1)
+ + MR(b,0,i,j,k)
+ *( MR(p,0,i+1,j+1,k) - MR(p,0,i+1,j-1,k)
+ - MR(p,0,i-1,j+1,k) + MR(p,0,i-1,j-1,k) )
+ + MR(b,1,i,j,k)
+ *( MR(p,0,i,j+1,k+1) - MR(p,0,i,j-1,k+1)
+ - MR(p,0,i,j+1,k-1) + MR(p,0,i,j-1,k-1) )
+ + MR(b,2,i,j,k)
+ *( MR(p,0,i+1,j,k+1) - MR(p,0,i-1,j,k+1)
+ - MR(p,0,i+1,j,k-1) + MR(p,0,i-1,j,k-1) )
+ + MR(c,0,i,j,k) * MR(p,0,i-1,j, k)
+ + MR(c,1,i,j,k) * MR(p,0,i, j-1,k)
+ + MR(c,2,i,j,k) * MR(p,0,i, j, k-1)
+ + MR(wrk1,0,i,j,k);
+
+ ss= (s0*MR(a,3,i,j,k) - MR(p,0,i,j,k))*MR(bnd,0,i,j,k);
+
+ gosa+= ss*ss;
+ MR(wrk2,0,i,j,k)= MR(p,0,i,j,k) + omega*ss;
+ }
+
+ for(i=1 ; i<imax ; i++)
+ for(j=1 ; j<jmax ; j++)
+ for(k=1 ; k<kmax ; k++)
+ MR(p,0,i,j,k)= MR(wrk2,0,i,j,k);
+
+ } /* end n loop */
+
+ return(gosa);
+}
+
+double
+second()
+{
+
+ struct timeval tm;
+ double t ;
+
+ static int base_sec = 0,base_usec = 0;
+
+ gettimeofday(&tm, NULL);
+
+ if(base_sec == 0 && base_usec == 0)
+ {
+ base_sec = tm.tv_sec;
+ base_usec = tm.tv_usec;
+ t = 0.0;
+ } else {
+ t = (double) (tm.tv_sec-base_sec) +
+ ((double) (tm.tv_usec-base_usec))/1.0e6 ;
+ }
+
+ return t ;
+}
+
Modified: test-suite/trunk/SingleSource/Benchmarks/Makefile
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/SingleSource/Benchmarks/Makefile?rev=53497&r1=53496&r2=53497&view=diff
==============================================================================
--- test-suite/trunk/SingleSource/Benchmarks/Makefile (original)
+++ test-suite/trunk/SingleSource/Benchmarks/Makefile Fri Jul 11 18:49:40 2008
@@ -1,6 +1,6 @@
LEVEL = ../..
PARALLEL_DIRS=Dhrystone CoyoteBench Shootout Shootout-C++ Stanford McGill \
- Misc Misc-C++ BenchmarkGame
+ Misc Misc-C++ BenchmarkGame Himeno
# Misc-C++-EH - someday when EH is supported in llvm-gcc we should
# re-enable this test. It always fails and its very slow
# (100MB Bytecode) so we disable it for now.
More information about the llvm-commits
mailing list