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