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[100000], intval, tmp; 10 SYRandom r; 11 Scalar x[100000],y[100000], 12 13 PetscInitialize(&argc, &argv,0,0,0); 14 ierr = SYRandomCreate( MPI_COMM_SELF,RANDOM_DEFAULT,&r); CHKERRQ(ierr); 15 16 /* Take care of paging effects */ 17 t1 = PetscGetTime(); 18 19 for (i=0; i<100000; i++) { 20 x[i] = i; 21 x[i] = i; 22 x[i] = i; 23 } 24 25 /* Form the random set of integers */ 26 for (i=0; i<10000; i++) { 27 ierr = SYRandomGetValue(r, &value); CHKERRQ(ierr); 28 intval = (int)(value*100000.0); 29 tmp = z[i]; 30 z[i] = z[intval]; 31 z[intval] = tmp; 32 } 33 34 35 t1 = PetscGetTime(); 36 for (i=0; i<10000; i++) { x[i] = y[z[i]]; } 37 t2 = PetscGetTime(); 38 fprintf(stderr,"%-15s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/10000.0); 39 40 41 t1 = PetscGetTime(); 42 for (i=0; i<10000; i++) { x[z[i]] = y[i]; } 43 t2 = PetscGetTime(); 44 fprintf(stderr,"%-15s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/10000.0); 45 46 t1 = PetscGetTime(); 47 for (i=0; i<10000; i++) { x[z[i]] = y[z[i]]; } 48 t2 = PetscGetTime(); 49 fprintf(stderr,"%-15s : %e sec\n","x[z[i]] = y[z[i]]",(t2-t1)/10000.0); 50 51 PetscFinalize(); 52 return 0; 53 } 54