xref: /petsc/src/benchmarks/Index.c (revision f3fe499b4cc4d64bf04aa4f5e4963dcc4eb56541)
11f480b34SSatish Balay 
2d382aafbSBarry Smith #include "petscsys.h"
31f480b34SSatish Balay 
45a655dc6SBarry Smith extern int BlastCache(void);
55a655dc6SBarry Smith extern int test1(void);
65a655dc6SBarry Smith extern int test2(void);
777c4ece6SBarry Smith 
84a2ae208SSatish Balay #undef __FUNCT__
94a2ae208SSatish Balay #define __FUNCT__ "main"
101f480b34SSatish Balay int main(int argc,char **argv)
111f480b34SSatish Balay {
12dfbe8321SBarry Smith   PetscErrorCode ierr;
13d3093643SSatish Balay 
1477c4ece6SBarry Smith   PetscInitialize(&argc,&argv,0,0);
151f480b34SSatish Balay 
16ac355199SBarry Smith   ierr = test1();CHKERRQ(ierr);
17ac355199SBarry Smith   ierr = test2();CHKERRQ(ierr);
1877c4ece6SBarry Smith 
19*f3fe499bSBarry Smith   ierr = PetscFinalize();
203a40ed3dSBarry Smith   PetscFunctionReturn(0);
2177c4ece6SBarry Smith }
2277c4ece6SBarry Smith 
234a2ae208SSatish Balay #undef __FUNCT__
244a2ae208SSatish Balay #define __FUNCT__ "test1"
25cf256101SBarry Smith int test1(void)
2677c4ece6SBarry Smith {
27b0a32e0cSBarry Smith   PetscLogDouble  t1,t2;
2847794344SBarry Smith   double      value;
292758efb8SSatish Balay   int         i,ierr,*z,*zi,intval;
30ea709b57SSatish Balay   PetscScalar *x,*y;
3177c4ece6SBarry Smith   PetscRandom r;
3277c4ece6SBarry Smith 
33c77d6671SHong Zhang   ierr = PetscRandomCreate(PETSC_COMM_SELF,&r);CHKERRQ(ierr);
34c77d6671SHong Zhang   ierr = PetscRandomSetFromOptions(r);CHKERRQ(ierr);
3587828ca2SBarry Smith   ierr = PetscMalloc(20000*sizeof(PetscScalar),&x);CHKERRQ(ierr);
3687828ca2SBarry Smith   ierr = PetscMalloc(20000*sizeof(PetscScalar),&y);CHKERRQ(ierr);
3777c4ece6SBarry Smith 
38ac355199SBarry Smith   ierr = PetscMalloc(2000*sizeof(int),&z);CHKERRQ(ierr);
39ac355199SBarry Smith   ierr = PetscMalloc(2000*sizeof(int),&zi);CHKERRQ(ierr);
4077c4ece6SBarry Smith 
4177c4ece6SBarry Smith 
421f480b34SSatish Balay 
431f480b34SSatish Balay   /* Take care of paging effects */
44d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
451f480b34SSatish Balay 
461f480b34SSatish Balay    /* Form the random set of integers */
4777c4ece6SBarry Smith   for (i=0; i<2000; i++) {
4877c4ece6SBarry Smith     ierr   = PetscRandomGetValue(r,&value);CHKERRQ(ierr);
4977c4ece6SBarry Smith     intval = (int)(value*20000.0);
50c9a02da4SSatish Balay     z[i]   = intval;
511f480b34SSatish Balay   }
521f480b34SSatish Balay 
5377c4ece6SBarry Smith   for (i=0; i<2000; i++) {
5477c4ece6SBarry Smith     ierr    = PetscRandomGetValue(r,&value);CHKERRQ(ierr);
5577c4ece6SBarry Smith     intval  = (int)(value*20000.0);
56ba8edd79SBarry Smith     zi[i]   = intval;
5777c4ece6SBarry Smith   }
58b4d8b9abSSatish Balay   /* fprintf(stdout,"Done setup\n"); */
5977c4ece6SBarry Smith 
60d3093643SSatish Balay   ierr = BlastCache();CHKERRQ(ierr);
611f480b34SSatish Balay 
62d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
6377c4ece6SBarry Smith   for (i=0; i<2000; i++) {  x[i] = y[i]; }
64d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
65b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[i] = y[i]",(t2-t1)/2000.0);
661f480b34SSatish Balay 
67d3093643SSatish Balay   ierr = BlastCache();CHKERRQ(ierr);
681f480b34SSatish Balay 
69d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
70608f96ebSSatish Balay   for (i=0; i<500; i+=4) {
71608f96ebSSatish Balay     x[i]   = y[z[i]];
72608f96ebSSatish Balay     x[1+i] = y[z[1+i]];
73608f96ebSSatish Balay     x[2+i] = y[z[2+i]];
74608f96ebSSatish Balay     x[3+i] = y[z[3+i]];
75608f96ebSSatish Balay   }
76d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
77b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[i] = y[idx[i]] - unroll 4",(t2-t1)/2000.0);
78608f96ebSSatish Balay 
79d3093643SSatish Balay   ierr = BlastCache();CHKERRQ(ierr);
80608f96ebSSatish Balay 
81d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr)
8277c4ece6SBarry Smith   for (i=0; i<2000; i++) {  x[i] = y[z[i]]; }
83d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
84b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/2000.0);
8577c4ece6SBarry Smith 
86d3093643SSatish Balay   ierr = BlastCache();CHKERRQ(ierr);
871f480b34SSatish Balay 
88d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
89608f96ebSSatish Balay   for (i=0; i<1000; i+=2) {  x[i] = y[z[i]];  x[1+i] = y[z[1+i]]; }
90d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
91b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[i] = y[idx[i]] - unroll 2",(t2-t1)/2000.0);
92608f96ebSSatish Balay 
93d3093643SSatish Balay   ierr = BlastCache();CHKERRQ(ierr);
94608f96ebSSatish Balay 
95d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
9677c4ece6SBarry Smith   for (i=0; i<2000; i++) {  x[z[i]] = y[i]; }
97d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
98b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/2000.0);
991f480b34SSatish Balay 
100d3093643SSatish Balay   ierr = BlastCache();CHKERRQ(ierr);
10177c4ece6SBarry Smith 
102d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
10377c4ece6SBarry Smith   for (i=0; i<2000; i++) {  x[z[i]] = y[zi[i]]; }
104d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
105b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[z[i]] = y[zi[i]]",(t2-t1)/2000.0);
10677c4ece6SBarry Smith 
107549d3d68SSatish Balay   ierr = PetscMemcpy(x,y,10);CHKERRQ(ierr);
108549d3d68SSatish Balay   ierr = PetscMemcpy(z,zi,10);CHKERRQ(ierr);
109606d414cSSatish Balay   ierr = PetscFree(z);CHKERRQ(ierr);
110606d414cSSatish Balay   ierr = PetscFree(zi);CHKERRQ(ierr);
111606d414cSSatish Balay   ierr = PetscFree(x);CHKERRQ(ierr);
112606d414cSSatish Balay   ierr = PetscFree(y);CHKERRQ(ierr);
11377c4ece6SBarry Smith   PetscRandomDestroy(r);
1143a40ed3dSBarry Smith   PetscFunctionReturn(0);
11577c4ece6SBarry Smith }
11677c4ece6SBarry Smith 
1174a2ae208SSatish Balay #undef __FUNCT__
1184a2ae208SSatish Balay #define __FUNCT__ "test2"
119cf256101SBarry Smith int test2(void)
12077c4ece6SBarry Smith {
121b0a32e0cSBarry Smith   PetscLogDouble   t1,t2;
12247794344SBarry Smith   double       value;
123d3093643SSatish Balay   int          i,ierr,z[20000],zi[20000],intval,tmp;
124ea709b57SSatish Balay   PetscScalar  x[20000],y[20000];
12577c4ece6SBarry Smith   PetscRandom  r;
12677c4ece6SBarry Smith 
127c77d6671SHong Zhang   ierr = PetscRandomCreate(PETSC_COMM_SELF,&r);CHKERRQ(ierr);
128c77d6671SHong Zhang   ierr = PetscRandomSetFromOptions(r);CHKERRQ(ierr);
12977c4ece6SBarry Smith 
13077c4ece6SBarry Smith   /* Take care of paging effects */
131d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
13277c4ece6SBarry Smith 
13377c4ece6SBarry Smith   for (i=0; i<20000; i++) {
13477c4ece6SBarry Smith     x[i]  = i;
13577c4ece6SBarry Smith     y[i]  = i;
136d3093643SSatish Balay     z[i]  = i;
137d3093643SSatish Balay     zi[i] = i;
13877c4ece6SBarry Smith   }
13977c4ece6SBarry Smith 
14077c4ece6SBarry Smith    /* Form the random set of integers */
141d3093643SSatish Balay   for (i=0; i<20000; i++) {
14277c4ece6SBarry Smith     ierr   = PetscRandomGetValue(r,&value);CHKERRQ(ierr);
14377c4ece6SBarry Smith     intval = (int)(value*20000.0);
14477c4ece6SBarry Smith     tmp    = z[i];
14577c4ece6SBarry Smith     z[i]   = z[intval];
14677c4ece6SBarry Smith     z[intval] = tmp;
14777c4ece6SBarry Smith   }
14877c4ece6SBarry Smith 
149d3093643SSatish Balay   for (i=0; i<20000; i++) {
15077c4ece6SBarry Smith     ierr   = PetscRandomGetValue(r,&value);CHKERRQ(ierr);
15177c4ece6SBarry Smith     intval = (int)(value*20000.0);
15277c4ece6SBarry Smith     tmp    = zi[i];
15377c4ece6SBarry Smith     zi[i]  = zi[intval];
15477c4ece6SBarry Smith     zi[intval] = tmp;
15577c4ece6SBarry Smith   }
156b4d8b9abSSatish Balay   /* fprintf(stdout,"Done setup\n"); */
15777c4ece6SBarry Smith 
158d3093643SSatish Balay   /* ierr = BlastCache();CHKERRQ(ierr); */
15977c4ece6SBarry Smith 
160d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
16177c4ece6SBarry Smith   for (i=0; i<2000; i++) {  x[i] = y[i]; }
162d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
163b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[i] = y[i]",(t2-t1)/2000.0);
16477c4ece6SBarry Smith 
165d3093643SSatish Balay   /* ierr = BlastCache();CHKERRQ(ierr); */
16677c4ece6SBarry Smith 
167d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
16877c4ece6SBarry Smith   for (i=0; i<2000; i++) {  y[i] = x[z[i]]; }
169d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
170b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/2000.0);
17177c4ece6SBarry Smith 
172d3093643SSatish Balay   /* ierr = BlastCache();CHKERRQ(ierr); */
17377c4ece6SBarry Smith 
174d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
17577c4ece6SBarry Smith   for (i=0; i<2000; i++) {  x[z[i]] = y[i]; }
176d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
177b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/2000.0);
17877c4ece6SBarry Smith 
179d3093643SSatish Balay   /* ierr = BlastCache();CHKERRQ(ierr); */
18077c4ece6SBarry Smith 
181d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
18277c4ece6SBarry Smith   for (i=0; i<2000; i++) {  y[z[i]] = x[zi[i]]; }
183d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
184b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[z[i]] = y[zi[i]]",(t2-t1)/2000.0);
18577c4ece6SBarry Smith 
18677c4ece6SBarry Smith 
18777c4ece6SBarry Smith   PetscRandomDestroy(r);
1883a40ed3dSBarry Smith   PetscFunctionReturn(0);
18977c4ece6SBarry Smith }
19077c4ece6SBarry Smith 
1914a2ae208SSatish Balay #undef __FUNCT__
1924a2ae208SSatish Balay #define __FUNCT__ "BlastCache"
193465d0859SSatish Balay int BlastCache(void)
19477c4ece6SBarry Smith {
1959ae0b57aSSatish Balay   int    i,ierr,n = 1000000;
196ea709b57SSatish Balay   PetscScalar *x,*y,*z,*a,*b;
19777c4ece6SBarry Smith 
19887828ca2SBarry Smith   ierr = PetscMalloc(5*n*sizeof(PetscScalar),&x);CHKERRQ(ierr);
19977c4ece6SBarry Smith   y = x + n;
20077c4ece6SBarry Smith   z = y + n;
20177c4ece6SBarry Smith   a = z + n;
20277c4ece6SBarry Smith   b = a + n;
20377c4ece6SBarry Smith 
20477c4ece6SBarry Smith   for (i=0; i<n; i++) {
20587828ca2SBarry Smith     a[i] = (PetscScalar) i;
20687828ca2SBarry Smith     y[i] = (PetscScalar) i;
20787828ca2SBarry Smith     z[i] = (PetscScalar) i;
20887828ca2SBarry Smith     b[i] = (PetscScalar) i;
20987828ca2SBarry Smith     x[i] = (PetscScalar) i;
210ba8edd79SBarry Smith   }
211ba8edd79SBarry Smith 
212ba8edd79SBarry Smith   for (i=0; i<n; i++) {
21377c4ece6SBarry Smith     a[i] = 3.0*x[i] + 2.0*y[i] + 3.3*z[i] - 25.*b[i];
21477c4ece6SBarry Smith   }
21577c4ece6SBarry Smith   for (i=0; i<n; i++) {
21677c4ece6SBarry Smith     b[i] = 3.0*x[i] + 2.0*y[i] + 3.3*a[i] - 25.*b[i];
21777c4ece6SBarry Smith   }
21877c4ece6SBarry Smith   for (i=0; i<n; i++) {
21977c4ece6SBarry Smith     z[i] = 3.0*x[i] + 2.0*y[i] + 3.3*a[i] - 25.*b[i];
22077c4ece6SBarry Smith   }
221606d414cSSatish Balay   ierr = PetscFree(x);CHKERRQ(ierr);
2223a40ed3dSBarry Smith   PetscFunctionReturn(0);
2231f480b34SSatish Balay }
224