1a5eb4965SSatish Balay #ifdef PETSC_RCS_HEADER 2*606d414cSSatish Balay static char vcid[] = "$Id: Index.c,v 1.22 1999/05/04 20:38:02 balay Exp balay $"; 3c9a02da4SSatish Balay #endif 41f480b34SSatish Balay 51f480b34SSatish Balay #include "petsc.h" 61f480b34SSatish Balay #include "sys.h" 71f480b34SSatish Balay 85a655dc6SBarry Smith extern int BlastCache(void); 95a655dc6SBarry Smith extern int test1(void); 105a655dc6SBarry Smith extern int test2(void); 1177c4ece6SBarry Smith 125a655dc6SBarry Smith #undef __FUNC__ 135a655dc6SBarry Smith #define __FUNC__ "main" 141f480b34SSatish Balay int main( int argc, char **argv) 151f480b34SSatish Balay { 16d3093643SSatish Balay int ierr; 17d3093643SSatish Balay 1877c4ece6SBarry Smith PetscInitialize(&argc, &argv,0,0); 191f480b34SSatish Balay 20d3093643SSatish Balay ierr = test1();CHKERRA(ierr); 21d3093643SSatish Balay ierr = test2();CHKERRA(ierr); 2277c4ece6SBarry Smith 2377c4ece6SBarry Smith PetscFinalize(); 243a40ed3dSBarry Smith PetscFunctionReturn(0); 2577c4ece6SBarry Smith } 2677c4ece6SBarry Smith 275a655dc6SBarry Smith #undef __FUNC__ 285a655dc6SBarry Smith #define __FUNC__ "test1" 29cf256101SBarry Smith int test1(void) 3077c4ece6SBarry Smith { 3147794344SBarry Smith PLogDouble t1, t2; 3247794344SBarry Smith double value; 332758efb8SSatish Balay int i, ierr,*z,*zi, intval; 3477c4ece6SBarry Smith Scalar *x, *y; 3577c4ece6SBarry Smith PetscRandom r; 3677c4ece6SBarry Smith 37029af93fSBarry Smith ierr = PetscRandomCreate(PETSC_COMM_SELF,RANDOM_DEFAULT,&r);CHKERRQ(ierr); 3877c4ece6SBarry Smith x = (Scalar *)PetscMalloc(20000*sizeof(Scalar));CHKPTRA(x); 3977c4ece6SBarry Smith y = (Scalar *)PetscMalloc(20000*sizeof(Scalar));CHKPTRA(y); 4077c4ece6SBarry Smith 4177c4ece6SBarry Smith z = (int *)PetscMalloc(2000*sizeof(int));CHKPTRA(z); 4277c4ece6SBarry Smith zi = (int *)PetscMalloc(2000*sizeof(int));CHKPTRA(zi); 4377c4ece6SBarry Smith 4477c4ece6SBarry Smith 451f480b34SSatish Balay 461f480b34SSatish Balay /* Take care of paging effects */ 47d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 481f480b34SSatish Balay 491f480b34SSatish Balay /* Form the random set of integers */ 5077c4ece6SBarry Smith for (i=0; i<2000; i++) { 5177c4ece6SBarry Smith ierr = PetscRandomGetValue(r, &value);CHKERRQ(ierr); 5277c4ece6SBarry Smith intval = (int)(value*20000.0); 53c9a02da4SSatish Balay z[i] = intval; 541f480b34SSatish Balay } 551f480b34SSatish Balay 5677c4ece6SBarry Smith for (i=0; i<2000; i++) { 5777c4ece6SBarry Smith ierr = PetscRandomGetValue(r, &value);CHKERRQ(ierr); 5877c4ece6SBarry Smith intval = (int)(value*20000.0); 59ba8edd79SBarry Smith zi[i] = intval; 6077c4ece6SBarry Smith } 6177c4ece6SBarry Smith fprintf(stderr,"Done setup\n"); 6277c4ece6SBarry Smith 63d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 641f480b34SSatish Balay 65d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 6677c4ece6SBarry Smith for (i=0; i<2000; i++) { x[i] = y[i]; } 67d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 6877c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[i] = y[i]",(t2-t1)/2000.0); 691f480b34SSatish Balay 70d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 711f480b34SSatish Balay 72d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 73608f96ebSSatish Balay for (i=0; i<500; i+=4) { 74608f96ebSSatish Balay x[i] = y[z[i]]; 75608f96ebSSatish Balay x[1+i] = y[z[1+i]]; 76608f96ebSSatish Balay x[2+i] = y[z[2+i]]; 77608f96ebSSatish Balay x[3+i] = y[z[3+i]]; 78608f96ebSSatish Balay } 79d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 80608f96ebSSatish Balay fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]] - unroll 4",(t2-t1)/2000.0); 81608f96ebSSatish Balay 82d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 83608f96ebSSatish Balay 84d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr) 8577c4ece6SBarry Smith for (i=0; i<2000; i++) { x[i] = y[z[i]]; } 86d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 8777c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/2000.0); 8877c4ece6SBarry Smith 89d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 901f480b34SSatish Balay 91d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 92608f96ebSSatish Balay for (i=0; i<1000; i+=2) { x[i] = y[z[i]]; x[1+i] = y[z[1+i]]; } 93d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 94608f96ebSSatish Balay fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]] - unroll 2",(t2-t1)/2000.0); 95608f96ebSSatish Balay 96d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 97608f96ebSSatish Balay 98d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 9977c4ece6SBarry Smith for (i=0; i<2000; i++) { x[z[i]] = y[i]; } 100d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 10177c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/2000.0); 1021f480b34SSatish Balay 103d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 10477c4ece6SBarry Smith 105d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 10677c4ece6SBarry Smith for (i=0; i<2000; i++) { x[z[i]] = y[zi[i]]; } 107d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 10877c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[zi[i]]",(t2-t1)/2000.0); 10977c4ece6SBarry Smith 110549d3d68SSatish Balay ierr = PetscMemcpy(x,y,10);CHKERRQ(ierr); 111549d3d68SSatish Balay ierr = PetscMemcpy(z,zi,10);CHKERRQ(ierr); 112*606d414cSSatish Balay ierr = PetscFree(z);CHKERRQ(ierr); 113*606d414cSSatish Balay ierr = PetscFree(zi);CHKERRQ(ierr); 114*606d414cSSatish Balay ierr = PetscFree(x);CHKERRQ(ierr); 115*606d414cSSatish Balay ierr = PetscFree(y);CHKERRQ(ierr); 11677c4ece6SBarry Smith PetscRandomDestroy(r); 1173a40ed3dSBarry Smith PetscFunctionReturn(0); 11877c4ece6SBarry Smith } 11977c4ece6SBarry Smith 1205a655dc6SBarry Smith #undef __FUNC__ 1215a655dc6SBarry Smith #define __FUNC__ "test2" 122cf256101SBarry Smith int test2(void) 12377c4ece6SBarry Smith { 12447794344SBarry Smith PLogDouble t1, t2; 12547794344SBarry Smith double value; 126d3093643SSatish Balay int i, ierr,z[20000],zi[20000], intval, tmp; 12777c4ece6SBarry Smith Scalar x[20000], y[20000]; 12877c4ece6SBarry Smith PetscRandom r; 12977c4ece6SBarry Smith 130029af93fSBarry Smith ierr = PetscRandomCreate(PETSC_COMM_SELF,RANDOM_DEFAULT,&r);CHKERRQ(ierr); 13177c4ece6SBarry Smith 13277c4ece6SBarry Smith /* Take care of paging effects */ 133d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 13477c4ece6SBarry Smith 13577c4ece6SBarry Smith for (i=0; i<20000; i++) { 13677c4ece6SBarry Smith x[i] = i; 13777c4ece6SBarry Smith y[i] = i; 138d3093643SSatish Balay z[i] = i; 139d3093643SSatish Balay zi[i] = i; 14077c4ece6SBarry Smith } 14177c4ece6SBarry Smith 14277c4ece6SBarry Smith /* Form the random set of integers */ 143d3093643SSatish Balay for (i=0; i<20000; i++) { 14477c4ece6SBarry Smith ierr = PetscRandomGetValue(r, &value);CHKERRQ(ierr); 14577c4ece6SBarry Smith intval = (int)(value*20000.0); 14677c4ece6SBarry Smith tmp = z[i]; 14777c4ece6SBarry Smith z[i] = z[intval]; 14877c4ece6SBarry Smith z[intval] = tmp; 14977c4ece6SBarry Smith } 15077c4ece6SBarry Smith 151d3093643SSatish Balay for (i=0; i<20000; i++) { 15277c4ece6SBarry Smith ierr = PetscRandomGetValue(r, &value);CHKERRQ(ierr); 15377c4ece6SBarry Smith intval = (int)(value*20000.0); 15477c4ece6SBarry Smith tmp = zi[i]; 15577c4ece6SBarry Smith zi[i] = zi[intval]; 15677c4ece6SBarry Smith zi[intval] = tmp; 15777c4ece6SBarry Smith } 15877c4ece6SBarry Smith fprintf(stderr,"Done setup\n"); 15977c4ece6SBarry Smith 160d3093643SSatish Balay /* ierr = BlastCache();CHKERRQ(ierr); */ 16177c4ece6SBarry Smith 162d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 16377c4ece6SBarry Smith for (i=0; i<2000; i++) { x[i] = y[i]; } 164d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 16577c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[i] = y[i]",(t2-t1)/2000.0); 16677c4ece6SBarry Smith 167d3093643SSatish Balay /* ierr = BlastCache();CHKERRQ(ierr); */ 16877c4ece6SBarry Smith 169d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 17077c4ece6SBarry Smith for (i=0; i<2000; i++) { y[i] = x[z[i]]; } 171d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 17277c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/2000.0); 17377c4ece6SBarry Smith 174d3093643SSatish Balay /* ierr = BlastCache();CHKERRQ(ierr); */ 17577c4ece6SBarry Smith 176d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 17777c4ece6SBarry Smith for (i=0; i<2000; i++) { x[z[i]] = y[i]; } 178d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 17977c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/2000.0); 18077c4ece6SBarry Smith 181d3093643SSatish Balay /* ierr = BlastCache();CHKERRQ(ierr); */ 18277c4ece6SBarry Smith 183d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 18477c4ece6SBarry Smith for (i=0; i<2000; i++) { y[z[i]] = x[zi[i]]; } 185d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 18677c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[zi[i]]",(t2-t1)/2000.0); 18777c4ece6SBarry Smith 18877c4ece6SBarry Smith 18977c4ece6SBarry Smith PetscRandomDestroy(r); 1903a40ed3dSBarry Smith PetscFunctionReturn(0); 19177c4ece6SBarry Smith } 19277c4ece6SBarry Smith 1935a655dc6SBarry Smith #undef __FUNC__ 1945a655dc6SBarry Smith #define __FUNC__ "BlastCache" 195465d0859SSatish Balay int BlastCache(void) 19677c4ece6SBarry Smith { 19777c4ece6SBarry Smith int i,n = 1000000; 19877c4ece6SBarry Smith Scalar *x,*y,*z,*a, *b; 19977c4ece6SBarry Smith 20007b89f8fSSatish Balay x = (Scalar *) PetscMalloc(5*n*sizeof(Scalar));CHKPTRA(x); 20177c4ece6SBarry Smith y = x + n; 20277c4ece6SBarry Smith z = y + n; 20377c4ece6SBarry Smith a = z + n; 20477c4ece6SBarry Smith b = a + n; 20577c4ece6SBarry Smith 20677c4ece6SBarry Smith for ( i=0; i<n; i++ ) { 207ba8edd79SBarry Smith a[i] = (Scalar) i; 208ba8edd79SBarry Smith y[i] = (Scalar) i; 209ba8edd79SBarry Smith z[i] = (Scalar) i; 210ba8edd79SBarry Smith b[i] = (Scalar) i; 211ba8edd79SBarry Smith x[i] = (Scalar) i; 212ba8edd79SBarry Smith } 213ba8edd79SBarry Smith 214ba8edd79SBarry Smith for ( i=0; i<n; i++ ) { 21577c4ece6SBarry Smith a[i] = 3.0*x[i] + 2.0*y[i] + 3.3*z[i] - 25.*b[i]; 21677c4ece6SBarry Smith } 21777c4ece6SBarry Smith for ( i=0; i<n; i++ ) { 21877c4ece6SBarry Smith b[i] = 3.0*x[i] + 2.0*y[i] + 3.3*a[i] - 25.*b[i]; 21977c4ece6SBarry Smith } 22077c4ece6SBarry Smith for ( i=0; i<n; i++ ) { 22177c4ece6SBarry Smith z[i] = 3.0*x[i] + 2.0*y[i] + 3.3*a[i] - 25.*b[i]; 22277c4ece6SBarry Smith } 223*606d414cSSatish Balay ierr = PetscFree(x);CHKERRQ(ierr); 2243a40ed3dSBarry Smith PetscFunctionReturn(0); 2251f480b34SSatish Balay } 226