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