xref: /petsc/src/benchmarks/Index.c (revision 606d414c6e034e02e67059b83ebaefc3ebe99698)
1a5eb4965SSatish Balay #ifdef PETSC_RCS_HEADER
2*606d414cSSatish Balay static char vcid[] = "$Id: Index.c,v 1.22 1999/05/04 20:38:02 balay Exp balay $";
3c9a02da4SSatish Balay #endif
41f480b34SSatish Balay 
51f480b34SSatish Balay #include "petsc.h"
61f480b34SSatish Balay #include "sys.h"
71f480b34SSatish Balay 
85a655dc6SBarry Smith extern int BlastCache(void);
95a655dc6SBarry Smith extern int test1(void);
105a655dc6SBarry Smith extern int test2(void);
1177c4ece6SBarry Smith 
125a655dc6SBarry Smith #undef __FUNC__
135a655dc6SBarry Smith #define __FUNC__ "main"
141f480b34SSatish Balay int main( int argc, char **argv)
151f480b34SSatish Balay {
16d3093643SSatish Balay   int ierr;
17d3093643SSatish Balay 
1877c4ece6SBarry Smith   PetscInitialize(&argc, &argv,0,0);
191f480b34SSatish Balay 
20d3093643SSatish Balay   ierr = test1();CHKERRA(ierr);
21d3093643SSatish Balay   ierr = test2();CHKERRA(ierr);
2277c4ece6SBarry Smith 
2377c4ece6SBarry Smith   PetscFinalize();
243a40ed3dSBarry Smith   PetscFunctionReturn(0);
2577c4ece6SBarry Smith }
2677c4ece6SBarry Smith 
275a655dc6SBarry Smith #undef __FUNC__
285a655dc6SBarry Smith #define __FUNC__ "test1"
29cf256101SBarry Smith int test1(void)
3077c4ece6SBarry Smith {
3147794344SBarry Smith   PLogDouble  t1, t2;
3247794344SBarry Smith   double      value;
332758efb8SSatish Balay   int         i, ierr,*z,*zi, intval;
3477c4ece6SBarry Smith   Scalar      *x, *y;
3577c4ece6SBarry Smith   PetscRandom r;
3677c4ece6SBarry Smith 
37029af93fSBarry Smith   ierr = PetscRandomCreate(PETSC_COMM_SELF,RANDOM_DEFAULT,&r);CHKERRQ(ierr);
3877c4ece6SBarry Smith   x    = (Scalar *)PetscMalloc(20000*sizeof(Scalar));CHKPTRA(x);
3977c4ece6SBarry Smith   y    = (Scalar *)PetscMalloc(20000*sizeof(Scalar));CHKPTRA(y);
4077c4ece6SBarry Smith 
4177c4ece6SBarry Smith   z     = (int *)PetscMalloc(2000*sizeof(int));CHKPTRA(z);
4277c4ece6SBarry Smith   zi    = (int *)PetscMalloc(2000*sizeof(int));CHKPTRA(zi);
4377c4ece6SBarry Smith 
4477c4ece6SBarry Smith 
451f480b34SSatish Balay 
461f480b34SSatish Balay   /* Take care of paging effects */
47d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
481f480b34SSatish Balay 
491f480b34SSatish Balay    /* Form the random set of integers */
5077c4ece6SBarry Smith   for (i=0; i<2000; i++) {
5177c4ece6SBarry Smith     ierr   = PetscRandomGetValue(r, &value);CHKERRQ(ierr);
5277c4ece6SBarry Smith     intval = (int)(value*20000.0);
53c9a02da4SSatish Balay     z[i]   = intval;
541f480b34SSatish Balay   }
551f480b34SSatish Balay 
5677c4ece6SBarry Smith   for (i=0; i<2000; i++) {
5777c4ece6SBarry Smith     ierr    = PetscRandomGetValue(r, &value);CHKERRQ(ierr);
5877c4ece6SBarry Smith     intval  = (int)(value*20000.0);
59ba8edd79SBarry Smith     zi[i]   = intval;
6077c4ece6SBarry Smith   }
6177c4ece6SBarry Smith   fprintf(stderr,"Done setup\n");
6277c4ece6SBarry Smith 
63d3093643SSatish Balay   ierr = BlastCache();CHKERRQ(ierr);
641f480b34SSatish Balay 
65d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
6677c4ece6SBarry Smith   for (i=0; i<2000; i++) {  x[i] = y[i]; }
67d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
6877c4ece6SBarry Smith   fprintf(stderr,"%-19s : %e sec\n","x[i] = y[i]",(t2-t1)/2000.0);
691f480b34SSatish Balay 
70d3093643SSatish Balay   ierr = BlastCache();CHKERRQ(ierr);
711f480b34SSatish Balay 
72d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
73608f96ebSSatish Balay   for (i=0; i<500; i+=4) {
74608f96ebSSatish Balay     x[i]   = y[z[i]];
75608f96ebSSatish Balay     x[1+i] = y[z[1+i]];
76608f96ebSSatish Balay     x[2+i] = y[z[2+i]];
77608f96ebSSatish Balay     x[3+i] = y[z[3+i]];
78608f96ebSSatish Balay   }
79d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
80608f96ebSSatish Balay   fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]] - unroll 4",(t2-t1)/2000.0);
81608f96ebSSatish Balay 
82d3093643SSatish Balay   ierr = BlastCache();CHKERRQ(ierr);
83608f96ebSSatish Balay 
84d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr)
8577c4ece6SBarry Smith   for (i=0; i<2000; i++) {  x[i] = y[z[i]]; }
86d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
8777c4ece6SBarry Smith   fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/2000.0);
8877c4ece6SBarry Smith 
89d3093643SSatish Balay   ierr = BlastCache();CHKERRQ(ierr);
901f480b34SSatish Balay 
91d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
92608f96ebSSatish Balay   for (i=0; i<1000; i+=2) {  x[i] = y[z[i]];  x[1+i] = y[z[1+i]]; }
93d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
94608f96ebSSatish Balay   fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]] - unroll 2",(t2-t1)/2000.0);
95608f96ebSSatish Balay 
96d3093643SSatish Balay   ierr = BlastCache();CHKERRQ(ierr);
97608f96ebSSatish Balay 
98d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
9977c4ece6SBarry Smith   for (i=0; i<2000; i++) {  x[z[i]] = y[i]; }
100d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
10177c4ece6SBarry Smith   fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/2000.0);
1021f480b34SSatish Balay 
103d3093643SSatish Balay   ierr = BlastCache();CHKERRQ(ierr);
10477c4ece6SBarry Smith 
105d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
10677c4ece6SBarry Smith   for (i=0; i<2000; i++) {  x[z[i]] = y[zi[i]]; }
107d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
10877c4ece6SBarry Smith   fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[zi[i]]",(t2-t1)/2000.0);
10977c4ece6SBarry Smith 
110549d3d68SSatish Balay   ierr = PetscMemcpy(x,y,10);CHKERRQ(ierr);
111549d3d68SSatish Balay   ierr = PetscMemcpy(z,zi,10);CHKERRQ(ierr);
112*606d414cSSatish Balay   ierr = PetscFree(z);CHKERRQ(ierr);
113*606d414cSSatish Balay   ierr = PetscFree(zi);CHKERRQ(ierr);
114*606d414cSSatish Balay   ierr = PetscFree(x);CHKERRQ(ierr);
115*606d414cSSatish Balay   ierr = PetscFree(y);CHKERRQ(ierr);
11677c4ece6SBarry Smith   PetscRandomDestroy(r);
1173a40ed3dSBarry Smith   PetscFunctionReturn(0);
11877c4ece6SBarry Smith }
11977c4ece6SBarry Smith 
1205a655dc6SBarry Smith #undef __FUNC__
1215a655dc6SBarry Smith #define __FUNC__ "test2"
122cf256101SBarry Smith int test2(void)
12377c4ece6SBarry Smith {
12447794344SBarry Smith   PLogDouble   t1, t2;
12547794344SBarry Smith   double       value;
126d3093643SSatish Balay   int          i, ierr,z[20000],zi[20000], intval, tmp;
12777c4ece6SBarry Smith   Scalar       x[20000], y[20000];
12877c4ece6SBarry Smith   PetscRandom  r;
12977c4ece6SBarry Smith 
130029af93fSBarry Smith   ierr = PetscRandomCreate(PETSC_COMM_SELF,RANDOM_DEFAULT,&r);CHKERRQ(ierr);
13177c4ece6SBarry Smith 
13277c4ece6SBarry Smith   /* Take care of paging effects */
133d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
13477c4ece6SBarry Smith 
13577c4ece6SBarry Smith   for (i=0; i<20000; i++) {
13677c4ece6SBarry Smith     x[i]  = i;
13777c4ece6SBarry Smith     y[i]  = i;
138d3093643SSatish Balay     z[i]  = i;
139d3093643SSatish Balay     zi[i] = i;
14077c4ece6SBarry Smith   }
14177c4ece6SBarry Smith 
14277c4ece6SBarry Smith    /* Form the random set of integers */
143d3093643SSatish Balay   for (i=0; i<20000; i++) {
14477c4ece6SBarry Smith     ierr   = PetscRandomGetValue(r, &value);CHKERRQ(ierr);
14577c4ece6SBarry Smith     intval = (int)(value*20000.0);
14677c4ece6SBarry Smith     tmp    = z[i];
14777c4ece6SBarry Smith     z[i]   = z[intval];
14877c4ece6SBarry Smith     z[intval] = tmp;
14977c4ece6SBarry Smith   }
15077c4ece6SBarry Smith 
151d3093643SSatish Balay   for (i=0; i<20000; i++) {
15277c4ece6SBarry Smith     ierr   = PetscRandomGetValue(r, &value);CHKERRQ(ierr);
15377c4ece6SBarry Smith     intval = (int)(value*20000.0);
15477c4ece6SBarry Smith     tmp    = zi[i];
15577c4ece6SBarry Smith     zi[i]  = zi[intval];
15677c4ece6SBarry Smith     zi[intval] = tmp;
15777c4ece6SBarry Smith   }
15877c4ece6SBarry Smith   fprintf(stderr,"Done setup\n");
15977c4ece6SBarry Smith 
160d3093643SSatish Balay   /* ierr = BlastCache();CHKERRQ(ierr); */
16177c4ece6SBarry Smith 
162d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
16377c4ece6SBarry Smith   for (i=0; i<2000; i++) {  x[i] = y[i]; }
164d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
16577c4ece6SBarry Smith   fprintf(stderr,"%-19s : %e sec\n","x[i] = y[i]",(t2-t1)/2000.0);
16677c4ece6SBarry Smith 
167d3093643SSatish Balay   /* ierr = BlastCache();CHKERRQ(ierr); */
16877c4ece6SBarry Smith 
169d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
17077c4ece6SBarry Smith   for (i=0; i<2000; i++) {  y[i] = x[z[i]]; }
171d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
17277c4ece6SBarry Smith   fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/2000.0);
17377c4ece6SBarry Smith 
174d3093643SSatish Balay   /* ierr = BlastCache();CHKERRQ(ierr); */
17577c4ece6SBarry Smith 
176d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
17777c4ece6SBarry Smith   for (i=0; i<2000; i++) {  x[z[i]] = y[i]; }
178d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
17977c4ece6SBarry Smith   fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/2000.0);
18077c4ece6SBarry Smith 
181d3093643SSatish Balay   /* ierr = BlastCache();CHKERRQ(ierr); */
18277c4ece6SBarry Smith 
183d3093643SSatish Balay   ierr = PetscGetTime(&t1);CHKERRQ(ierr);
18477c4ece6SBarry Smith   for (i=0; i<2000; i++) {  y[z[i]] = x[zi[i]]; }
185d3093643SSatish Balay   ierr = PetscGetTime(&t2);CHKERRQ(ierr);
18677c4ece6SBarry Smith   fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[zi[i]]",(t2-t1)/2000.0);
18777c4ece6SBarry Smith 
18877c4ece6SBarry Smith 
18977c4ece6SBarry Smith   PetscRandomDestroy(r);
1903a40ed3dSBarry Smith   PetscFunctionReturn(0);
19177c4ece6SBarry Smith }
19277c4ece6SBarry Smith 
1935a655dc6SBarry Smith #undef __FUNC__
1945a655dc6SBarry Smith #define __FUNC__ "BlastCache"
195465d0859SSatish Balay int BlastCache(void)
19677c4ece6SBarry Smith {
19777c4ece6SBarry Smith   int    i,n = 1000000;
19877c4ece6SBarry Smith   Scalar *x,*y,*z,*a, *b;
19977c4ece6SBarry Smith 
20007b89f8fSSatish Balay   x = (Scalar *) PetscMalloc(5*n*sizeof(Scalar));CHKPTRA(x);
20177c4ece6SBarry Smith   y = x + n;
20277c4ece6SBarry Smith   z = y + n;
20377c4ece6SBarry Smith   a = z + n;
20477c4ece6SBarry Smith   b = a + n;
20577c4ece6SBarry Smith 
20677c4ece6SBarry Smith   for ( i=0; i<n; i++ ) {
207ba8edd79SBarry Smith     a[i] = (Scalar) i;
208ba8edd79SBarry Smith     y[i] = (Scalar) i;
209ba8edd79SBarry Smith     z[i] = (Scalar) i;
210ba8edd79SBarry Smith     b[i] = (Scalar) i;
211ba8edd79SBarry Smith     x[i] = (Scalar) i;
212ba8edd79SBarry Smith   }
213ba8edd79SBarry Smith 
214ba8edd79SBarry Smith   for ( i=0; i<n; i++ ) {
21577c4ece6SBarry Smith     a[i] = 3.0*x[i] + 2.0*y[i] + 3.3*z[i] - 25.*b[i];
21677c4ece6SBarry Smith   }
21777c4ece6SBarry Smith   for ( i=0; i<n; i++ ) {
21877c4ece6SBarry Smith     b[i] = 3.0*x[i] + 2.0*y[i] + 3.3*a[i] - 25.*b[i];
21977c4ece6SBarry Smith   }
22077c4ece6SBarry Smith   for ( i=0; i<n; i++ ) {
22177c4ece6SBarry Smith     z[i] = 3.0*x[i] + 2.0*y[i] + 3.3*a[i] - 25.*b[i];
22277c4ece6SBarry Smith   }
223*606d414cSSatish Balay   ierr = PetscFree(x);CHKERRQ(ierr);
2243a40ed3dSBarry Smith   PetscFunctionReturn(0);
2251f480b34SSatish Balay }
226