1a5eb4965SSatish Balay #ifdef PETSC_RCS_HEADER 2*d3093643SSatish Balay static char vcid[] = "$Id: Index.c,v 1.19 1998/03/24 00:15:09 balay Exp balay $"; 3c9a02da4SSatish Balay #endif 41f480b34SSatish Balay 51f480b34SSatish Balay #include "petsc.h" 61f480b34SSatish Balay #include "sys.h" 71f480b34SSatish Balay 8cf256101SBarry Smith int BlastCache(void); 9cf256101SBarry Smith int test1(void); 10cf256101SBarry Smith int test2(void); 1177c4ece6SBarry Smith 121f480b34SSatish Balay int main( int argc, char **argv) 131f480b34SSatish Balay { 14*d3093643SSatish Balay int ierr; 15*d3093643SSatish Balay 1677c4ece6SBarry Smith PetscInitialize(&argc, &argv,0,0); 171f480b34SSatish Balay 18*d3093643SSatish Balay ierr = test1(); CHKERRA(ierr); 19*d3093643SSatish Balay ierr = test2(); CHKERRA(ierr); 2077c4ece6SBarry Smith 2177c4ece6SBarry Smith PetscFinalize(); 223a40ed3dSBarry Smith PetscFunctionReturn(0); 2377c4ece6SBarry Smith } 2477c4ece6SBarry Smith 25cf256101SBarry Smith int test1(void) 2677c4ece6SBarry Smith { 2747794344SBarry Smith PLogDouble t1, t2; 2847794344SBarry Smith double value; 292758efb8SSatish Balay int i, ierr,*z,*zi, intval; 3077c4ece6SBarry Smith Scalar *x, *y; 3177c4ece6SBarry Smith PetscRandom r; 3277c4ece6SBarry Smith 33029af93fSBarry Smith ierr = PetscRandomCreate(PETSC_COMM_SELF,RANDOM_DEFAULT,&r); CHKERRQ(ierr); 3477c4ece6SBarry Smith x = (Scalar *)PetscMalloc(20000*sizeof(Scalar)); CHKPTRA(x); 3577c4ece6SBarry Smith y = (Scalar *)PetscMalloc(20000*sizeof(Scalar)); CHKPTRA(y); 3677c4ece6SBarry Smith 3777c4ece6SBarry Smith z = (int *)PetscMalloc(2000*sizeof(int)); CHKPTRA(z); 3877c4ece6SBarry Smith zi = (int *)PetscMalloc(2000*sizeof(int)); CHKPTRA(zi); 3977c4ece6SBarry Smith 4077c4ece6SBarry Smith 411f480b34SSatish Balay 421f480b34SSatish Balay /* Take care of paging effects */ 43*d3093643SSatish Balay ierr = PetscGetTime(&t1); CHKERRQ(ierr); 441f480b34SSatish Balay 451f480b34SSatish Balay /* Form the random set of integers */ 4677c4ece6SBarry Smith for (i=0; i<2000; i++) { 4777c4ece6SBarry Smith ierr = PetscRandomGetValue(r, &value); CHKERRQ(ierr); 4877c4ece6SBarry Smith intval = (int)(value*20000.0); 49c9a02da4SSatish Balay z[i] = intval; 501f480b34SSatish Balay } 511f480b34SSatish Balay 5277c4ece6SBarry Smith for (i=0; i<2000; i++) { 5377c4ece6SBarry Smith ierr = PetscRandomGetValue(r, &value); CHKERRQ(ierr); 5477c4ece6SBarry Smith intval = (int)(value*20000.0); 55ba8edd79SBarry Smith zi[i] = intval; 5677c4ece6SBarry Smith } 5777c4ece6SBarry Smith fprintf(stderr,"Done setup\n"); 5877c4ece6SBarry Smith 59*d3093643SSatish Balay ierr = BlastCache(); CHKERRQ(ierr); 601f480b34SSatish Balay 61*d3093643SSatish Balay ierr = PetscGetTime(&t1); CHKERRQ(ierr); 6277c4ece6SBarry Smith for (i=0; i<2000; i++) { x[i] = y[i]; } 63*d3093643SSatish Balay ierr = PetscGetTime(&t2); CHKERRQ(ierr); 6477c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[i] = y[i]",(t2-t1)/2000.0); 651f480b34SSatish Balay 66*d3093643SSatish Balay ierr = BlastCache(); CHKERRQ(ierr); 671f480b34SSatish Balay 68*d3093643SSatish Balay ierr = PetscGetTime(&t1); CHKERRQ(ierr); 69608f96ebSSatish Balay for (i=0; i<500; i+=4) { 70608f96ebSSatish Balay x[i] = y[z[i]]; 71608f96ebSSatish Balay x[1+i] = y[z[1+i]]; 72608f96ebSSatish Balay x[2+i] = y[z[2+i]]; 73608f96ebSSatish Balay x[3+i] = y[z[3+i]]; 74608f96ebSSatish Balay } 75*d3093643SSatish Balay ierr = PetscGetTime(&t2); CHKERRQ(ierr); 76608f96ebSSatish Balay fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]] - unroll 4",(t2-t1)/2000.0); 77608f96ebSSatish Balay 78*d3093643SSatish Balay ierr = BlastCache(); CHKERRQ(ierr); 79608f96ebSSatish Balay 80*d3093643SSatish Balay ierr = PetscGetTime(&t1); CHKERRQ(ierr) 8177c4ece6SBarry Smith for (i=0; i<2000; i++) { x[i] = y[z[i]]; } 82*d3093643SSatish Balay ierr = PetscGetTime(&t2); CHKERRQ(ierr); 8377c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/2000.0); 8477c4ece6SBarry Smith 85*d3093643SSatish Balay ierr = BlastCache(); CHKERRQ(ierr); 861f480b34SSatish Balay 87*d3093643SSatish Balay ierr = PetscGetTime(&t1); CHKERRQ(ierr); 88608f96ebSSatish Balay for (i=0; i<1000; i+=2) { x[i] = y[z[i]]; x[1+i] = y[z[1+i]]; } 89*d3093643SSatish Balay ierr = PetscGetTime(&t2); CHKERRQ(ierr); 90608f96ebSSatish Balay fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]] - unroll 2",(t2-t1)/2000.0); 91608f96ebSSatish Balay 92*d3093643SSatish Balay ierr = BlastCache(); CHKERRQ(ierr); 93608f96ebSSatish Balay 94*d3093643SSatish Balay ierr = PetscGetTime(&t1); CHKERRQ(ierr); 9577c4ece6SBarry Smith for (i=0; i<2000; i++) { x[z[i]] = y[i]; } 96*d3093643SSatish Balay ierr = PetscGetTime(&t2); CHKERRQ(ierr); 9777c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/2000.0); 981f480b34SSatish Balay 99*d3093643SSatish Balay ierr = BlastCache(); CHKERRQ(ierr); 10077c4ece6SBarry Smith 101*d3093643SSatish Balay ierr = PetscGetTime(&t1); CHKERRQ(ierr); 10277c4ece6SBarry Smith for (i=0; i<2000; i++) { x[z[i]] = y[zi[i]]; } 103*d3093643SSatish Balay ierr = PetscGetTime(&t2); CHKERRQ(ierr); 10477c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[zi[i]]",(t2-t1)/2000.0); 10577c4ece6SBarry Smith 106608f96ebSSatish Balay PetscMemcpy(x,y,10); 107608f96ebSSatish Balay PetscMemcpy(z,zi,10); 10877c4ece6SBarry Smith PetscFree(z); 10977c4ece6SBarry Smith PetscFree(zi); 11077c4ece6SBarry Smith PetscFree(x); 11177c4ece6SBarry Smith PetscFree(y); 11277c4ece6SBarry Smith PetscRandomDestroy(r); 1133a40ed3dSBarry Smith PetscFunctionReturn(0); 11477c4ece6SBarry Smith } 11577c4ece6SBarry Smith 116cf256101SBarry Smith int test2(void) 11777c4ece6SBarry Smith { 11847794344SBarry Smith PLogDouble t1, t2; 11947794344SBarry Smith double value; 120*d3093643SSatish Balay int i, ierr,z[20000],zi[20000], intval, tmp; 12177c4ece6SBarry Smith Scalar x[20000], y[20000]; 12277c4ece6SBarry Smith PetscRandom r; 12377c4ece6SBarry Smith 124029af93fSBarry Smith ierr = PetscRandomCreate(PETSC_COMM_SELF,RANDOM_DEFAULT,&r); CHKERRQ(ierr); 12577c4ece6SBarry Smith 12677c4ece6SBarry Smith /* Take care of paging effects */ 127*d3093643SSatish Balay ierr = PetscGetTime(&t1); CHKERRQ(ierr); 12877c4ece6SBarry Smith 12977c4ece6SBarry Smith for (i=0; i<20000; i++) { 13077c4ece6SBarry Smith x[i] = i; 13177c4ece6SBarry Smith y[i] = i; 132*d3093643SSatish Balay z[i] = i; 133*d3093643SSatish Balay zi[i] = i; 13477c4ece6SBarry Smith } 13577c4ece6SBarry Smith 13677c4ece6SBarry Smith /* Form the random set of integers */ 137*d3093643SSatish Balay for (i=0; i<20000; i++) { 13877c4ece6SBarry Smith ierr = PetscRandomGetValue(r, &value); CHKERRQ(ierr); 13977c4ece6SBarry Smith intval = (int)(value*20000.0); 14077c4ece6SBarry Smith tmp = z[i]; 14177c4ece6SBarry Smith z[i] = z[intval]; 14277c4ece6SBarry Smith z[intval] = tmp; 14377c4ece6SBarry Smith } 14477c4ece6SBarry Smith 145*d3093643SSatish Balay for (i=0; i<20000; i++) { 14677c4ece6SBarry Smith ierr = PetscRandomGetValue(r, &value); CHKERRQ(ierr); 14777c4ece6SBarry Smith intval = (int)(value*20000.0); 14877c4ece6SBarry Smith tmp = zi[i]; 14977c4ece6SBarry Smith zi[i] = zi[intval]; 15077c4ece6SBarry Smith zi[intval] = tmp; 15177c4ece6SBarry Smith } 15277c4ece6SBarry Smith fprintf(stderr,"Done setup\n"); 15377c4ece6SBarry Smith 154*d3093643SSatish Balay /* ierr = BlastCache(); CHKERRQ(ierr); */ 15577c4ece6SBarry Smith 156*d3093643SSatish Balay ierr = PetscGetTime(&t1); CHKERRQ(ierr); 15777c4ece6SBarry Smith for (i=0; i<2000; i++) { x[i] = y[i]; } 158*d3093643SSatish Balay ierr = PetscGetTime(&t2); CHKERRQ(ierr); 15977c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[i] = y[i]",(t2-t1)/2000.0); 16077c4ece6SBarry Smith 161*d3093643SSatish Balay /* ierr = BlastCache(); CHKERRQ(ierr); */ 16277c4ece6SBarry Smith 163*d3093643SSatish Balay ierr = PetscGetTime(&t1); CHKERRQ(ierr); 16477c4ece6SBarry Smith for (i=0; i<2000; i++) { y[i] = x[z[i]]; } 165*d3093643SSatish Balay ierr = PetscGetTime(&t2); CHKERRQ(ierr); 16677c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/2000.0); 16777c4ece6SBarry Smith 168*d3093643SSatish Balay /* ierr = BlastCache(); CHKERRQ(ierr); */ 16977c4ece6SBarry Smith 170*d3093643SSatish Balay ierr = PetscGetTime(&t1); CHKERRQ(ierr); 17177c4ece6SBarry Smith for (i=0; i<2000; i++) { x[z[i]] = y[i]; } 172*d3093643SSatish Balay ierr = PetscGetTime(&t2); CHKERRQ(ierr); 17377c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/2000.0); 17477c4ece6SBarry Smith 175*d3093643SSatish Balay /* ierr = BlastCache(); CHKERRQ(ierr); */ 17677c4ece6SBarry Smith 177*d3093643SSatish Balay ierr = PetscGetTime(&t1); CHKERRQ(ierr); 17877c4ece6SBarry Smith for (i=0; i<2000; i++) { y[z[i]] = x[zi[i]]; } 179*d3093643SSatish Balay ierr = PetscGetTime(&t2); CHKERRQ(ierr); 18077c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[zi[i]]",(t2-t1)/2000.0); 18177c4ece6SBarry Smith 18277c4ece6SBarry Smith 18377c4ece6SBarry Smith PetscRandomDestroy(r); 1843a40ed3dSBarry Smith PetscFunctionReturn(0); 18577c4ece6SBarry Smith } 18677c4ece6SBarry Smith 187465d0859SSatish Balay int BlastCache(void) 18877c4ece6SBarry Smith { 18977c4ece6SBarry Smith int i,n = 1000000; 19077c4ece6SBarry Smith Scalar *x,*y,*z,*a, *b; 19177c4ece6SBarry Smith 19207b89f8fSSatish Balay x = (Scalar *) PetscMalloc(5*n*sizeof(Scalar)); CHKPTRA(x); 19377c4ece6SBarry Smith y = x + n; 19477c4ece6SBarry Smith z = y + n; 19577c4ece6SBarry Smith a = z + n; 19677c4ece6SBarry Smith b = a + n; 19777c4ece6SBarry Smith 19877c4ece6SBarry Smith for ( i=0; i<n; i++ ) { 199ba8edd79SBarry Smith a[i] = (Scalar) i; 200ba8edd79SBarry Smith y[i] = (Scalar) i; 201ba8edd79SBarry Smith z[i] = (Scalar) i; 202ba8edd79SBarry Smith b[i] = (Scalar) i; 203ba8edd79SBarry Smith x[i] = (Scalar) i; 204ba8edd79SBarry Smith } 205ba8edd79SBarry Smith 206ba8edd79SBarry Smith for ( i=0; i<n; i++ ) { 20777c4ece6SBarry Smith a[i] = 3.0*x[i] + 2.0*y[i] + 3.3*z[i] - 25.*b[i]; 20877c4ece6SBarry Smith } 20977c4ece6SBarry Smith for ( i=0; i<n; i++ ) { 21077c4ece6SBarry Smith b[i] = 3.0*x[i] + 2.0*y[i] + 3.3*a[i] - 25.*b[i]; 21177c4ece6SBarry Smith } 21277c4ece6SBarry Smith for ( i=0; i<n; i++ ) { 21377c4ece6SBarry Smith z[i] = 3.0*x[i] + 2.0*y[i] + 3.3*a[i] - 25.*b[i]; 21477c4ece6SBarry Smith } 21577c4ece6SBarry Smith PetscFree(x); 2163a40ed3dSBarry Smith PetscFunctionReturn(0); 2171f480b34SSatish Balay } 218