xref: /petsc/src/benchmarks/Index.c (revision d3093643a96ad6850ab921b2896ddc4b4b6ee8d4)
1a5eb4965SSatish Balay #ifdef PETSC_RCS_HEADER
2*d3093643SSatish Balay static char vcid[] = "$Id: Index.c,v 1.19 1998/03/24 00:15:09 balay Exp balay $";
3c9a02da4SSatish Balay #endif
41f480b34SSatish Balay 
51f480b34SSatish Balay #include "petsc.h"
61f480b34SSatish Balay #include "sys.h"
71f480b34SSatish Balay 
8cf256101SBarry Smith int BlastCache(void);
9cf256101SBarry Smith int test1(void);
10cf256101SBarry Smith int test2(void);
1177c4ece6SBarry Smith 
121f480b34SSatish Balay int main( int argc, char **argv)
131f480b34SSatish Balay {
14*d3093643SSatish Balay   int ierr;
15*d3093643SSatish Balay 
1677c4ece6SBarry Smith   PetscInitialize(&argc, &argv,0,0);
171f480b34SSatish Balay 
18*d3093643SSatish Balay   ierr = test1(); CHKERRA(ierr);
19*d3093643SSatish Balay   ierr = test2(); CHKERRA(ierr);
2077c4ece6SBarry Smith 
2177c4ece6SBarry Smith   PetscFinalize();
223a40ed3dSBarry Smith   PetscFunctionReturn(0);
2377c4ece6SBarry Smith }
2477c4ece6SBarry Smith 
25cf256101SBarry Smith int test1(void)
2677c4ece6SBarry Smith {
2747794344SBarry Smith   PLogDouble  t1, t2;
2847794344SBarry Smith   double      value;
292758efb8SSatish Balay   int         i, ierr,*z,*zi, intval;
3077c4ece6SBarry Smith   Scalar      *x, *y;
3177c4ece6SBarry Smith   PetscRandom r;
3277c4ece6SBarry Smith 
33029af93fSBarry Smith   ierr = PetscRandomCreate(PETSC_COMM_SELF,RANDOM_DEFAULT,&r); CHKERRQ(ierr);
3477c4ece6SBarry Smith   x    = (Scalar *)PetscMalloc(20000*sizeof(Scalar)); CHKPTRA(x);
3577c4ece6SBarry Smith   y    = (Scalar *)PetscMalloc(20000*sizeof(Scalar)); CHKPTRA(y);
3677c4ece6SBarry Smith 
3777c4ece6SBarry Smith   z     = (int *)PetscMalloc(2000*sizeof(int)); CHKPTRA(z);
3877c4ece6SBarry Smith   zi    = (int *)PetscMalloc(2000*sizeof(int)); CHKPTRA(zi);
3977c4ece6SBarry Smith 
4077c4ece6SBarry Smith 
411f480b34SSatish Balay 
421f480b34SSatish Balay   /* Take care of paging effects */
43*d3093643SSatish Balay   ierr = PetscGetTime(&t1); CHKERRQ(ierr);
441f480b34SSatish Balay 
451f480b34SSatish Balay    /* Form the random set of integers */
4677c4ece6SBarry Smith   for (i=0; i<2000; i++) {
4777c4ece6SBarry Smith     ierr   = PetscRandomGetValue(r, &value); CHKERRQ(ierr);
4877c4ece6SBarry Smith     intval = (int)(value*20000.0);
49c9a02da4SSatish Balay     z[i]   = intval;
501f480b34SSatish Balay   }
511f480b34SSatish Balay 
5277c4ece6SBarry Smith   for (i=0; i<2000; i++) {
5377c4ece6SBarry Smith     ierr    = PetscRandomGetValue(r, &value); CHKERRQ(ierr);
5477c4ece6SBarry Smith     intval  = (int)(value*20000.0);
55ba8edd79SBarry Smith     zi[i]   = intval;
5677c4ece6SBarry Smith   }
5777c4ece6SBarry Smith   fprintf(stderr,"Done setup\n");
5877c4ece6SBarry Smith 
59*d3093643SSatish Balay   ierr = BlastCache(); CHKERRQ(ierr);
601f480b34SSatish Balay 
61*d3093643SSatish Balay   ierr = PetscGetTime(&t1); CHKERRQ(ierr);
6277c4ece6SBarry Smith   for (i=0; i<2000; i++) {  x[i] = y[i]; }
63*d3093643SSatish Balay   ierr = PetscGetTime(&t2); CHKERRQ(ierr);
6477c4ece6SBarry Smith   fprintf(stderr,"%-19s : %e sec\n","x[i] = y[i]",(t2-t1)/2000.0);
651f480b34SSatish Balay 
66*d3093643SSatish Balay   ierr = BlastCache(); CHKERRQ(ierr);
671f480b34SSatish Balay 
68*d3093643SSatish Balay   ierr = PetscGetTime(&t1); CHKERRQ(ierr);
69608f96ebSSatish Balay   for (i=0; i<500; i+=4) {
70608f96ebSSatish Balay     x[i]   = y[z[i]];
71608f96ebSSatish Balay     x[1+i] = y[z[1+i]];
72608f96ebSSatish Balay     x[2+i] = y[z[2+i]];
73608f96ebSSatish Balay     x[3+i] = y[z[3+i]];
74608f96ebSSatish Balay   }
75*d3093643SSatish Balay   ierr = PetscGetTime(&t2); CHKERRQ(ierr);
76608f96ebSSatish Balay   fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]] - unroll 4",(t2-t1)/2000.0);
77608f96ebSSatish Balay 
78*d3093643SSatish Balay   ierr = BlastCache(); CHKERRQ(ierr);
79608f96ebSSatish Balay 
80*d3093643SSatish Balay   ierr = PetscGetTime(&t1); CHKERRQ(ierr)
8177c4ece6SBarry Smith   for (i=0; i<2000; i++) {  x[i] = y[z[i]]; }
82*d3093643SSatish Balay   ierr = PetscGetTime(&t2); CHKERRQ(ierr);
8377c4ece6SBarry Smith   fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/2000.0);
8477c4ece6SBarry Smith 
85*d3093643SSatish Balay   ierr = BlastCache(); CHKERRQ(ierr);
861f480b34SSatish Balay 
87*d3093643SSatish Balay   ierr = PetscGetTime(&t1); CHKERRQ(ierr);
88608f96ebSSatish Balay   for (i=0; i<1000; i+=2) {  x[i] = y[z[i]];  x[1+i] = y[z[1+i]]; }
89*d3093643SSatish Balay   ierr = PetscGetTime(&t2); CHKERRQ(ierr);
90608f96ebSSatish Balay   fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]] - unroll 2",(t2-t1)/2000.0);
91608f96ebSSatish Balay 
92*d3093643SSatish Balay   ierr = BlastCache(); CHKERRQ(ierr);
93608f96ebSSatish Balay 
94*d3093643SSatish Balay   ierr = PetscGetTime(&t1); CHKERRQ(ierr);
9577c4ece6SBarry Smith   for (i=0; i<2000; i++) {  x[z[i]] = y[i]; }
96*d3093643SSatish Balay   ierr = PetscGetTime(&t2); CHKERRQ(ierr);
9777c4ece6SBarry Smith   fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/2000.0);
981f480b34SSatish Balay 
99*d3093643SSatish Balay   ierr = BlastCache(); CHKERRQ(ierr);
10077c4ece6SBarry Smith 
101*d3093643SSatish Balay   ierr = PetscGetTime(&t1); CHKERRQ(ierr);
10277c4ece6SBarry Smith   for (i=0; i<2000; i++) {  x[z[i]] = y[zi[i]]; }
103*d3093643SSatish Balay   ierr = PetscGetTime(&t2); CHKERRQ(ierr);
10477c4ece6SBarry Smith   fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[zi[i]]",(t2-t1)/2000.0);
10577c4ece6SBarry Smith 
106608f96ebSSatish Balay   PetscMemcpy(x,y,10);
107608f96ebSSatish Balay   PetscMemcpy(z,zi,10);
10877c4ece6SBarry Smith   PetscFree(z);
10977c4ece6SBarry Smith   PetscFree(zi);
11077c4ece6SBarry Smith   PetscFree(x);
11177c4ece6SBarry Smith   PetscFree(y);
11277c4ece6SBarry Smith   PetscRandomDestroy(r);
1133a40ed3dSBarry Smith   PetscFunctionReturn(0);
11477c4ece6SBarry Smith }
11577c4ece6SBarry Smith 
116cf256101SBarry Smith int test2(void)
11777c4ece6SBarry Smith {
11847794344SBarry Smith   PLogDouble   t1, t2;
11947794344SBarry Smith   double       value;
120*d3093643SSatish Balay   int          i, ierr,z[20000],zi[20000], intval, tmp;
12177c4ece6SBarry Smith   Scalar       x[20000], y[20000];
12277c4ece6SBarry Smith   PetscRandom  r;
12377c4ece6SBarry Smith 
124029af93fSBarry Smith   ierr = PetscRandomCreate(PETSC_COMM_SELF,RANDOM_DEFAULT,&r); CHKERRQ(ierr);
12577c4ece6SBarry Smith 
12677c4ece6SBarry Smith   /* Take care of paging effects */
127*d3093643SSatish Balay   ierr = PetscGetTime(&t1); CHKERRQ(ierr);
12877c4ece6SBarry Smith 
12977c4ece6SBarry Smith   for (i=0; i<20000; i++) {
13077c4ece6SBarry Smith     x[i]  = i;
13177c4ece6SBarry Smith     y[i]  = i;
132*d3093643SSatish Balay     z[i]  = i;
133*d3093643SSatish Balay     zi[i] = i;
13477c4ece6SBarry Smith   }
13577c4ece6SBarry Smith 
13677c4ece6SBarry Smith    /* Form the random set of integers */
137*d3093643SSatish Balay   for (i=0; i<20000; i++) {
13877c4ece6SBarry Smith     ierr   = PetscRandomGetValue(r, &value); CHKERRQ(ierr);
13977c4ece6SBarry Smith     intval = (int)(value*20000.0);
14077c4ece6SBarry Smith     tmp    = z[i];
14177c4ece6SBarry Smith     z[i]   = z[intval];
14277c4ece6SBarry Smith     z[intval] = tmp;
14377c4ece6SBarry Smith   }
14477c4ece6SBarry Smith 
145*d3093643SSatish Balay   for (i=0; i<20000; i++) {
14677c4ece6SBarry Smith     ierr   = PetscRandomGetValue(r, &value); CHKERRQ(ierr);
14777c4ece6SBarry Smith     intval = (int)(value*20000.0);
14877c4ece6SBarry Smith     tmp    = zi[i];
14977c4ece6SBarry Smith     zi[i]  = zi[intval];
15077c4ece6SBarry Smith     zi[intval] = tmp;
15177c4ece6SBarry Smith   }
15277c4ece6SBarry Smith   fprintf(stderr,"Done setup\n");
15377c4ece6SBarry Smith 
154*d3093643SSatish Balay   /* ierr = BlastCache();  CHKERRQ(ierr); */
15577c4ece6SBarry Smith 
156*d3093643SSatish Balay   ierr = PetscGetTime(&t1); CHKERRQ(ierr);
15777c4ece6SBarry Smith   for (i=0; i<2000; i++) {  x[i] = y[i]; }
158*d3093643SSatish Balay   ierr = PetscGetTime(&t2); CHKERRQ(ierr);
15977c4ece6SBarry Smith   fprintf(stderr,"%-19s : %e sec\n","x[i] = y[i]",(t2-t1)/2000.0);
16077c4ece6SBarry Smith 
161*d3093643SSatish Balay   /* ierr = BlastCache();  CHKERRQ(ierr); */
16277c4ece6SBarry Smith 
163*d3093643SSatish Balay   ierr = PetscGetTime(&t1); CHKERRQ(ierr);
16477c4ece6SBarry Smith   for (i=0; i<2000; i++) {  y[i] = x[z[i]]; }
165*d3093643SSatish Balay   ierr = PetscGetTime(&t2); CHKERRQ(ierr);
16677c4ece6SBarry Smith   fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/2000.0);
16777c4ece6SBarry Smith 
168*d3093643SSatish Balay   /* ierr = BlastCache();  CHKERRQ(ierr); */
16977c4ece6SBarry Smith 
170*d3093643SSatish Balay   ierr = PetscGetTime(&t1); CHKERRQ(ierr);
17177c4ece6SBarry Smith   for (i=0; i<2000; i++) {  x[z[i]] = y[i]; }
172*d3093643SSatish Balay   ierr = PetscGetTime(&t2); CHKERRQ(ierr);
17377c4ece6SBarry Smith   fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/2000.0);
17477c4ece6SBarry Smith 
175*d3093643SSatish Balay   /* ierr = BlastCache();  CHKERRQ(ierr); */
17677c4ece6SBarry Smith 
177*d3093643SSatish Balay   ierr = PetscGetTime(&t1); CHKERRQ(ierr);
17877c4ece6SBarry Smith   for (i=0; i<2000; i++) {  y[z[i]] = x[zi[i]]; }
179*d3093643SSatish Balay   ierr = PetscGetTime(&t2); CHKERRQ(ierr);
18077c4ece6SBarry Smith   fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[zi[i]]",(t2-t1)/2000.0);
18177c4ece6SBarry Smith 
18277c4ece6SBarry Smith 
18377c4ece6SBarry Smith   PetscRandomDestroy(r);
1843a40ed3dSBarry Smith   PetscFunctionReturn(0);
18577c4ece6SBarry Smith }
18677c4ece6SBarry Smith 
187465d0859SSatish Balay int BlastCache(void)
18877c4ece6SBarry Smith {
18977c4ece6SBarry Smith   int    i,n = 1000000;
19077c4ece6SBarry Smith   Scalar *x,*y,*z,*a, *b;
19177c4ece6SBarry Smith 
19207b89f8fSSatish Balay   x = (Scalar *) PetscMalloc(5*n*sizeof(Scalar)); CHKPTRA(x);
19377c4ece6SBarry Smith   y = x + n;
19477c4ece6SBarry Smith   z = y + n;
19577c4ece6SBarry Smith   a = z + n;
19677c4ece6SBarry Smith   b = a + n;
19777c4ece6SBarry Smith 
19877c4ece6SBarry Smith   for ( i=0; i<n; i++ ) {
199ba8edd79SBarry Smith     a[i] = (Scalar) i;
200ba8edd79SBarry Smith     y[i] = (Scalar) i;
201ba8edd79SBarry Smith     z[i] = (Scalar) i;
202ba8edd79SBarry Smith     b[i] = (Scalar) i;
203ba8edd79SBarry Smith     x[i] = (Scalar) i;
204ba8edd79SBarry Smith   }
205ba8edd79SBarry Smith 
206ba8edd79SBarry Smith   for ( i=0; i<n; i++ ) {
20777c4ece6SBarry Smith     a[i] = 3.0*x[i] + 2.0*y[i] + 3.3*z[i] - 25.*b[i];
20877c4ece6SBarry Smith   }
20977c4ece6SBarry Smith   for ( i=0; i<n; i++ ) {
21077c4ece6SBarry Smith     b[i] = 3.0*x[i] + 2.0*y[i] + 3.3*a[i] - 25.*b[i];
21177c4ece6SBarry Smith   }
21277c4ece6SBarry Smith   for ( i=0; i<n; i++ ) {
21377c4ece6SBarry Smith     z[i] = 3.0*x[i] + 2.0*y[i] + 3.3*a[i] - 25.*b[i];
21477c4ece6SBarry Smith   }
21577c4ece6SBarry Smith   PetscFree(x);
2163a40ed3dSBarry Smith   PetscFunctionReturn(0);
2171f480b34SSatish Balay }
218