xref: /petsc/src/benchmarks/Index.c (revision 8563dfcc547dae59d5e1dc6b8e602db41cb72b14)
11f480b34SSatish Balay 
2c6db04a5SJed Brown #include <petscsys.h>
3*8563dfccSBarry Smith #include <petsctime.h>
4*8563dfccSBarry Smith 
51f480b34SSatish Balay 
65a655dc6SBarry Smith extern int BlastCache(void);
75a655dc6SBarry Smith extern int test1(void);
85a655dc6SBarry Smith extern int test2(void);
977c4ece6SBarry Smith 
104a2ae208SSatish Balay #undef __FUNCT__
114a2ae208SSatish Balay #define __FUNCT__ "main"
121f480b34SSatish Balay int main(int argc,char **argv)
131f480b34SSatish Balay {
14dfbe8321SBarry Smith   PetscErrorCode ierr;
15d3093643SSatish Balay 
1677c4ece6SBarry Smith   PetscInitialize(&argc,&argv,0,0);
171f480b34SSatish Balay 
18ac355199SBarry Smith   ierr = test1();CHKERRQ(ierr);
19ac355199SBarry Smith   ierr = test2();CHKERRQ(ierr);
2077c4ece6SBarry Smith 
21f3fe499bSBarry Smith   ierr = PetscFinalize();
223a40ed3dSBarry Smith   PetscFunctionReturn(0);
2377c4ece6SBarry Smith }
2477c4ece6SBarry Smith 
254a2ae208SSatish Balay #undef __FUNCT__
264a2ae208SSatish Balay #define __FUNCT__ "test1"
27cf256101SBarry Smith int test1(void)
2877c4ece6SBarry Smith {
29b0a32e0cSBarry Smith   PetscLogDouble t1,t2;
3047794344SBarry Smith   double         value;
312758efb8SSatish Balay   int            i,ierr,*z,*zi,intval;
32ea709b57SSatish Balay   PetscScalar    *x,*y;
3377c4ece6SBarry Smith   PetscRandom    r;
3477c4ece6SBarry Smith 
35c77d6671SHong Zhang   ierr = PetscRandomCreate(PETSC_COMM_SELF,&r);CHKERRQ(ierr);
36c77d6671SHong Zhang   ierr = PetscRandomSetFromOptions(r);CHKERRQ(ierr);
3787828ca2SBarry Smith   ierr = PetscMalloc(20000*sizeof(PetscScalar),&x);CHKERRQ(ierr);
3887828ca2SBarry Smith   ierr = PetscMalloc(20000*sizeof(PetscScalar),&y);CHKERRQ(ierr);
3977c4ece6SBarry Smith 
40ac355199SBarry Smith   ierr = PetscMalloc(2000*sizeof(int),&z);CHKERRQ(ierr);
41ac355199SBarry Smith   ierr = PetscMalloc(2000*sizeof(int),&zi);CHKERRQ(ierr);
4277c4ece6SBarry Smith 
4377c4ece6SBarry Smith 
441f480b34SSatish Balay 
451f480b34SSatish Balay   /* Take care of paging effects */
46*8563dfccSBarry Smith   ierr = PetscTime(&t1);CHKERRQ(ierr);
471f480b34SSatish Balay 
481f480b34SSatish Balay   /* Form the random set of integers */
4977c4ece6SBarry Smith   for (i=0; i<2000; i++) {
5077c4ece6SBarry Smith     ierr   = PetscRandomGetValue(r,&value);CHKERRQ(ierr);
5177c4ece6SBarry Smith     intval = (int)(value*20000.0);
52c9a02da4SSatish Balay     z[i]   = intval;
531f480b34SSatish Balay   }
541f480b34SSatish Balay 
5577c4ece6SBarry Smith   for (i=0; i<2000; i++) {
5677c4ece6SBarry Smith     ierr   = PetscRandomGetValue(r,&value);CHKERRQ(ierr);
5777c4ece6SBarry Smith     intval = (int)(value*20000.0);
58ba8edd79SBarry Smith     zi[i]  = intval;
5977c4ece6SBarry Smith   }
60b4d8b9abSSatish Balay   /* fprintf(stdout,"Done setup\n"); */
6177c4ece6SBarry Smith 
62d3093643SSatish Balay   ierr = BlastCache();CHKERRQ(ierr);
631f480b34SSatish Balay 
64*8563dfccSBarry Smith   ierr = PetscTime(&t1);CHKERRQ(ierr);
656f2b61bcSKarl Rupp   for (i=0; i<2000; i++) x[i] = y[i];
66*8563dfccSBarry Smith   ierr = PetscTime(&t2);CHKERRQ(ierr);
67b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[i] = y[i]",(t2-t1)/2000.0);
681f480b34SSatish Balay 
69d3093643SSatish Balay   ierr = BlastCache();CHKERRQ(ierr);
701f480b34SSatish Balay 
71*8563dfccSBarry Smith   ierr = PetscTime(&t1);CHKERRQ(ierr);
72608f96ebSSatish Balay   for (i=0; i<500; i+=4) {
73608f96ebSSatish Balay     x[i]   = y[z[i]];
74608f96ebSSatish Balay     x[1+i] = y[z[1+i]];
75608f96ebSSatish Balay     x[2+i] = y[z[2+i]];
76608f96ebSSatish Balay     x[3+i] = y[z[3+i]];
77608f96ebSSatish Balay   }
78*8563dfccSBarry Smith   ierr = PetscTime(&t2);CHKERRQ(ierr);
79b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[i] = y[idx[i]] - unroll 4",(t2-t1)/2000.0);
80608f96ebSSatish Balay 
81d3093643SSatish Balay   ierr = BlastCache();CHKERRQ(ierr);
82608f96ebSSatish Balay 
83*8563dfccSBarry Smith   ierr = PetscTime(&t1);CHKERRQ(ierr)
846f2b61bcSKarl Rupp   for (i=0; i<2000; i++) x[i] = y[z[i]];
85*8563dfccSBarry Smith   ierr = PetscTime(&t2);CHKERRQ(ierr);
86b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/2000.0);
8777c4ece6SBarry Smith 
88d3093643SSatish Balay   ierr = BlastCache();CHKERRQ(ierr);
891f480b34SSatish Balay 
90*8563dfccSBarry Smith   ierr = PetscTime(&t1);CHKERRQ(ierr);
91608f96ebSSatish Balay   for (i=0; i<1000; i+=2) {  x[i] = y[z[i]];  x[1+i] = y[z[1+i]]; }
92*8563dfccSBarry Smith   ierr = PetscTime(&t2);CHKERRQ(ierr);
93b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[i] = y[idx[i]] - unroll 2",(t2-t1)/2000.0);
94608f96ebSSatish Balay 
95d3093643SSatish Balay   ierr = BlastCache();CHKERRQ(ierr);
96608f96ebSSatish Balay 
97*8563dfccSBarry Smith   ierr = PetscTime(&t1);CHKERRQ(ierr);
986f2b61bcSKarl Rupp   for (i=0; i<2000; i++) x[z[i]] = y[i];
99*8563dfccSBarry Smith   ierr = PetscTime(&t2);CHKERRQ(ierr);
100b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/2000.0);
1011f480b34SSatish Balay 
102d3093643SSatish Balay   ierr = BlastCache();CHKERRQ(ierr);
10377c4ece6SBarry Smith 
104*8563dfccSBarry Smith   ierr = PetscTime(&t1);CHKERRQ(ierr);
1056f2b61bcSKarl Rupp   for (i=0; i<2000; i++) x[z[i]] = y[zi[i]];
106*8563dfccSBarry Smith   ierr = PetscTime(&t2);CHKERRQ(ierr);
107b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[z[i]] = y[zi[i]]",(t2-t1)/2000.0);
10877c4ece6SBarry Smith 
109549d3d68SSatish Balay   ierr = PetscMemcpy(x,y,10);CHKERRQ(ierr);
110549d3d68SSatish Balay   ierr = PetscMemcpy(z,zi,10);CHKERRQ(ierr);
111606d414cSSatish Balay   ierr = PetscFree(z);CHKERRQ(ierr);
112606d414cSSatish Balay   ierr = PetscFree(zi);CHKERRQ(ierr);
113606d414cSSatish Balay   ierr = PetscFree(x);CHKERRQ(ierr);
114606d414cSSatish Balay   ierr = PetscFree(y);CHKERRQ(ierr);
11596e147daSBarry Smith   ierr = PetscRandomDestroy(&r);CHKERRQ(ierr);
1163a40ed3dSBarry Smith   PetscFunctionReturn(0);
11777c4ece6SBarry Smith }
11877c4ece6SBarry Smith 
1194a2ae208SSatish Balay #undef __FUNCT__
1204a2ae208SSatish Balay #define __FUNCT__ "test2"
121cf256101SBarry Smith int test2(void)
12277c4ece6SBarry Smith {
123b0a32e0cSBarry Smith   PetscLogDouble t1,t2;
12447794344SBarry Smith   double         value;
125d3093643SSatish Balay   int            i,ierr,z[20000],zi[20000],intval,tmp;
126ea709b57SSatish Balay   PetscScalar    x[20000],y[20000];
12777c4ece6SBarry Smith   PetscRandom    r;
12877c4ece6SBarry Smith 
129c77d6671SHong Zhang   ierr = PetscRandomCreate(PETSC_COMM_SELF,&r);CHKERRQ(ierr);
130c77d6671SHong Zhang   ierr = PetscRandomSetFromOptions(r);CHKERRQ(ierr);
13177c4ece6SBarry Smith 
13277c4ece6SBarry Smith   /* Take care of paging effects */
133*8563dfccSBarry Smith   ierr = PetscTime(&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   }
158b4d8b9abSSatish Balay   /* fprintf(stdout,"Done setup\n"); */
15977c4ece6SBarry Smith 
160d3093643SSatish Balay   /* ierr = BlastCache();CHKERRQ(ierr); */
16177c4ece6SBarry Smith 
162*8563dfccSBarry Smith   ierr = PetscTime(&t1);CHKERRQ(ierr);
1636f2b61bcSKarl Rupp   for (i=0; i<2000; i++) x[i] = y[i];
164*8563dfccSBarry Smith   ierr = PetscTime(&t2);CHKERRQ(ierr);
165b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[i] = y[i]",(t2-t1)/2000.0);
16677c4ece6SBarry Smith 
167d3093643SSatish Balay   /* ierr = BlastCache();CHKERRQ(ierr); */
16877c4ece6SBarry Smith 
169*8563dfccSBarry Smith   ierr = PetscTime(&t1);CHKERRQ(ierr);
1706f2b61bcSKarl Rupp   for (i=0; i<2000; i++) y[i] = x[z[i]];
171*8563dfccSBarry Smith   ierr = PetscTime(&t2);CHKERRQ(ierr);
172b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/2000.0);
17377c4ece6SBarry Smith 
174d3093643SSatish Balay   /* ierr = BlastCache();CHKERRQ(ierr); */
17577c4ece6SBarry Smith 
176*8563dfccSBarry Smith   ierr = PetscTime(&t1);CHKERRQ(ierr);
1776f2b61bcSKarl Rupp   for (i=0; i<2000; i++) x[z[i]] = y[i];
178*8563dfccSBarry Smith   ierr = PetscTime(&t2);CHKERRQ(ierr);
179b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/2000.0);
18077c4ece6SBarry Smith 
181d3093643SSatish Balay   /* ierr = BlastCache();CHKERRQ(ierr); */
18277c4ece6SBarry Smith 
183*8563dfccSBarry Smith   ierr = PetscTime(&t1);CHKERRQ(ierr);
1846f2b61bcSKarl Rupp   for (i=0; i<2000; i++) y[z[i]] = x[zi[i]];
185*8563dfccSBarry Smith   ierr = PetscTime(&t2);CHKERRQ(ierr);
186b4d8b9abSSatish Balay   fprintf(stdout,"%-27s : %e sec\n","x[z[i]] = y[zi[i]]",(t2-t1)/2000.0);
18777c4ece6SBarry Smith 
18877c4ece6SBarry Smith 
18996e147daSBarry Smith   ierr = PetscRandomDestroy(&r);CHKERRQ(ierr);
1903a40ed3dSBarry Smith   PetscFunctionReturn(0);
19177c4ece6SBarry Smith }
19277c4ece6SBarry Smith 
1934a2ae208SSatish Balay #undef __FUNCT__
1944a2ae208SSatish Balay #define __FUNCT__ "BlastCache"
195465d0859SSatish Balay int BlastCache(void)
19677c4ece6SBarry Smith {
1979ae0b57aSSatish Balay   int         i,ierr,n = 1000000;
198ea709b57SSatish Balay   PetscScalar *x,*y,*z,*a,*b;
19977c4ece6SBarry Smith 
20087828ca2SBarry Smith   ierr = PetscMalloc(5*n*sizeof(PetscScalar),&x);CHKERRQ(ierr);
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++) {
20787828ca2SBarry Smith     a[i] = (PetscScalar) i;
20887828ca2SBarry Smith     y[i] = (PetscScalar) i;
20987828ca2SBarry Smith     z[i] = (PetscScalar) i;
21087828ca2SBarry Smith     b[i] = (PetscScalar) i;
21187828ca2SBarry Smith     x[i] = (PetscScalar) i;
212ba8edd79SBarry Smith   }
213ba8edd79SBarry Smith 
2146f2b61bcSKarl Rupp   for (i=0; i<n; i++) a[i] = 3.0*x[i] + 2.0*y[i] + 3.3*z[i] - 25.*b[i];
2156f2b61bcSKarl Rupp   for (i=0; i<n; i++) b[i] = 3.0*x[i] + 2.0*y[i] + 3.3*a[i] - 25.*b[i];
2166f2b61bcSKarl Rupp   for (i=0; i<n; i++) z[i] = 3.0*x[i] + 2.0*y[i] + 3.3*a[i] - 25.*b[i];
217606d414cSSatish Balay   ierr = PetscFree(x);CHKERRQ(ierr);
2183a40ed3dSBarry Smith   PetscFunctionReturn(0);
2191f480b34SSatish Balay }
220