xref: /petsc/src/benchmarks/Index.c (revision 19bcc07ff2e1ed103f891a90425af0415610a77d)
1 
2 #include "stdio.h"
3 #include "petsc.h"
4 #include "sys.h"
5 
6 int main( int argc, char **argv)
7 {
8   double    t1, t2, value;
9   int       i, ierr,z[10000], intval, tmp;
10   Scalar    *x, *y;
11   SYRandom  r;
12 
13   PetscInitialize(&argc, &argv,0,0,0);
14   ierr = SYRandomCreate(MPI_COMM_SELF,RANDOM_DEFAULT,&r); CHKERRQ(ierr);
15   x    = (Scalar *)PetscMalloc(10000*sizeof(Scalar)); CHKPTRA(x);
16   y    = (Scalar *)PetscMalloc(10000*sizeof(Scalar)); CHKPTRA(y);
17 
18   /* Take care of paging effects */
19   t1 = PetscGetTime();
20 
21   for (i=0; i<10000; i++) {
22     /*    x[i] = i;
23     y[i] = i; */
24     z[i] = i;
25   }
26 
27   /* Form the random set of integers */
28   for (i=0; i<10000; i++) {
29     ierr   = SYRandomGetValue(r, &value); CHKERRQ(ierr);
30     intval = (int)(value*10000.0);
31     tmp    = z[i];
32     z[i]   = z[intval];
33     z[intval] = tmp;
34   }
35 
36 
37   t1 = PetscGetTime();
38   for (i=0; i<1000; i++) {  x[i] = y[z[i]]; }
39   t2 = PetscGetTime();
40   fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/1000.0);
41 
42 
43   t1 = PetscGetTime();
44   for (i=0; i<1000; i++) {  x[z[i]] = y[i]; }
45   t2 = PetscGetTime();
46   fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/1000.0);
47 
48   t1 = PetscGetTime();
49   for (i=0; i<1000; i++) {  x[z[i]] = y[z[i]]; }
50   t2 = PetscGetTime();
51   fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[z[i]]",(t2-t1)/1000.0);
52 
53   PetscFinalize();
54   return 0;
55 }
56