11f480b34SSatish Balay 2d382aafbSBarry Smith #include "petscsys.h" 31f480b34SSatish Balay 45a655dc6SBarry Smith extern int BlastCache(void); 55a655dc6SBarry Smith extern int test1(void); 65a655dc6SBarry Smith extern int test2(void); 777c4ece6SBarry Smith 84a2ae208SSatish Balay #undef __FUNCT__ 94a2ae208SSatish Balay #define __FUNCT__ "main" 101f480b34SSatish Balay int main(int argc,char **argv) 111f480b34SSatish Balay { 12dfbe8321SBarry Smith PetscErrorCode ierr; 13d3093643SSatish Balay 1477c4ece6SBarry Smith PetscInitialize(&argc,&argv,0,0); 151f480b34SSatish Balay 16ac355199SBarry Smith ierr = test1();CHKERRQ(ierr); 17ac355199SBarry Smith ierr = test2();CHKERRQ(ierr); 1877c4ece6SBarry Smith 19*f3fe499bSBarry Smith ierr = PetscFinalize(); 203a40ed3dSBarry Smith PetscFunctionReturn(0); 2177c4ece6SBarry Smith } 2277c4ece6SBarry Smith 234a2ae208SSatish Balay #undef __FUNCT__ 244a2ae208SSatish Balay #define __FUNCT__ "test1" 25cf256101SBarry Smith int test1(void) 2677c4ece6SBarry Smith { 27b0a32e0cSBarry Smith PetscLogDouble t1,t2; 2847794344SBarry Smith double value; 292758efb8SSatish Balay int i,ierr,*z,*zi,intval; 30ea709b57SSatish Balay PetscScalar *x,*y; 3177c4ece6SBarry Smith PetscRandom r; 3277c4ece6SBarry Smith 33c77d6671SHong Zhang ierr = PetscRandomCreate(PETSC_COMM_SELF,&r);CHKERRQ(ierr); 34c77d6671SHong Zhang ierr = PetscRandomSetFromOptions(r);CHKERRQ(ierr); 3587828ca2SBarry Smith ierr = PetscMalloc(20000*sizeof(PetscScalar),&x);CHKERRQ(ierr); 3687828ca2SBarry Smith ierr = PetscMalloc(20000*sizeof(PetscScalar),&y);CHKERRQ(ierr); 3777c4ece6SBarry Smith 38ac355199SBarry Smith ierr = PetscMalloc(2000*sizeof(int),&z);CHKERRQ(ierr); 39ac355199SBarry Smith ierr = PetscMalloc(2000*sizeof(int),&zi);CHKERRQ(ierr); 4077c4ece6SBarry Smith 4177c4ece6SBarry Smith 421f480b34SSatish Balay 431f480b34SSatish Balay /* Take care of paging effects */ 44d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 451f480b34SSatish Balay 461f480b34SSatish Balay /* Form the random set of integers */ 4777c4ece6SBarry Smith for (i=0; i<2000; i++) { 4877c4ece6SBarry Smith ierr = PetscRandomGetValue(r,&value);CHKERRQ(ierr); 4977c4ece6SBarry Smith intval = (int)(value*20000.0); 50c9a02da4SSatish Balay z[i] = intval; 511f480b34SSatish Balay } 521f480b34SSatish Balay 5377c4ece6SBarry Smith for (i=0; i<2000; i++) { 5477c4ece6SBarry Smith ierr = PetscRandomGetValue(r,&value);CHKERRQ(ierr); 5577c4ece6SBarry Smith intval = (int)(value*20000.0); 56ba8edd79SBarry Smith zi[i] = intval; 5777c4ece6SBarry Smith } 58b4d8b9abSSatish Balay /* fprintf(stdout,"Done setup\n"); */ 5977c4ece6SBarry Smith 60d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 611f480b34SSatish Balay 62d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 6377c4ece6SBarry Smith for (i=0; i<2000; i++) { x[i] = y[i]; } 64d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 65b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[i] = y[i]",(t2-t1)/2000.0); 661f480b34SSatish Balay 67d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 681f480b34SSatish Balay 69d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 70608f96ebSSatish Balay for (i=0; i<500; i+=4) { 71608f96ebSSatish Balay x[i] = y[z[i]]; 72608f96ebSSatish Balay x[1+i] = y[z[1+i]]; 73608f96ebSSatish Balay x[2+i] = y[z[2+i]]; 74608f96ebSSatish Balay x[3+i] = y[z[3+i]]; 75608f96ebSSatish Balay } 76d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 77b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[i] = y[idx[i]] - unroll 4",(t2-t1)/2000.0); 78608f96ebSSatish Balay 79d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 80608f96ebSSatish Balay 81d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr) 8277c4ece6SBarry Smith for (i=0; i<2000; i++) { x[i] = y[z[i]]; } 83d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 84b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/2000.0); 8577c4ece6SBarry Smith 86d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 871f480b34SSatish Balay 88d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 89608f96ebSSatish Balay for (i=0; i<1000; i+=2) { x[i] = y[z[i]]; x[1+i] = y[z[1+i]]; } 90d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 91b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[i] = y[idx[i]] - unroll 2",(t2-t1)/2000.0); 92608f96ebSSatish Balay 93d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 94608f96ebSSatish Balay 95d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 9677c4ece6SBarry Smith for (i=0; i<2000; i++) { x[z[i]] = y[i]; } 97d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 98b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/2000.0); 991f480b34SSatish Balay 100d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 10177c4ece6SBarry Smith 102d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 10377c4ece6SBarry Smith for (i=0; i<2000; i++) { x[z[i]] = y[zi[i]]; } 104d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 105b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[z[i]] = y[zi[i]]",(t2-t1)/2000.0); 10677c4ece6SBarry Smith 107549d3d68SSatish Balay ierr = PetscMemcpy(x,y,10);CHKERRQ(ierr); 108549d3d68SSatish Balay ierr = PetscMemcpy(z,zi,10);CHKERRQ(ierr); 109606d414cSSatish Balay ierr = PetscFree(z);CHKERRQ(ierr); 110606d414cSSatish Balay ierr = PetscFree(zi);CHKERRQ(ierr); 111606d414cSSatish Balay ierr = PetscFree(x);CHKERRQ(ierr); 112606d414cSSatish Balay ierr = PetscFree(y);CHKERRQ(ierr); 11377c4ece6SBarry Smith PetscRandomDestroy(r); 1143a40ed3dSBarry Smith PetscFunctionReturn(0); 11577c4ece6SBarry Smith } 11677c4ece6SBarry Smith 1174a2ae208SSatish Balay #undef __FUNCT__ 1184a2ae208SSatish Balay #define __FUNCT__ "test2" 119cf256101SBarry Smith int test2(void) 12077c4ece6SBarry Smith { 121b0a32e0cSBarry Smith PetscLogDouble t1,t2; 12247794344SBarry Smith double value; 123d3093643SSatish Balay int i,ierr,z[20000],zi[20000],intval,tmp; 124ea709b57SSatish Balay PetscScalar x[20000],y[20000]; 12577c4ece6SBarry Smith PetscRandom r; 12677c4ece6SBarry Smith 127c77d6671SHong Zhang ierr = PetscRandomCreate(PETSC_COMM_SELF,&r);CHKERRQ(ierr); 128c77d6671SHong Zhang ierr = PetscRandomSetFromOptions(r);CHKERRQ(ierr); 12977c4ece6SBarry Smith 13077c4ece6SBarry Smith /* Take care of paging effects */ 131d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 13277c4ece6SBarry Smith 13377c4ece6SBarry Smith for (i=0; i<20000; i++) { 13477c4ece6SBarry Smith x[i] = i; 13577c4ece6SBarry Smith y[i] = i; 136d3093643SSatish Balay z[i] = i; 137d3093643SSatish Balay zi[i] = i; 13877c4ece6SBarry Smith } 13977c4ece6SBarry Smith 14077c4ece6SBarry Smith /* Form the random set of integers */ 141d3093643SSatish Balay for (i=0; i<20000; i++) { 14277c4ece6SBarry Smith ierr = PetscRandomGetValue(r,&value);CHKERRQ(ierr); 14377c4ece6SBarry Smith intval = (int)(value*20000.0); 14477c4ece6SBarry Smith tmp = z[i]; 14577c4ece6SBarry Smith z[i] = z[intval]; 14677c4ece6SBarry Smith z[intval] = tmp; 14777c4ece6SBarry Smith } 14877c4ece6SBarry Smith 149d3093643SSatish Balay for (i=0; i<20000; i++) { 15077c4ece6SBarry Smith ierr = PetscRandomGetValue(r,&value);CHKERRQ(ierr); 15177c4ece6SBarry Smith intval = (int)(value*20000.0); 15277c4ece6SBarry Smith tmp = zi[i]; 15377c4ece6SBarry Smith zi[i] = zi[intval]; 15477c4ece6SBarry Smith zi[intval] = tmp; 15577c4ece6SBarry Smith } 156b4d8b9abSSatish Balay /* fprintf(stdout,"Done setup\n"); */ 15777c4ece6SBarry Smith 158d3093643SSatish Balay /* ierr = BlastCache();CHKERRQ(ierr); */ 15977c4ece6SBarry Smith 160d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 16177c4ece6SBarry Smith for (i=0; i<2000; i++) { x[i] = y[i]; } 162d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 163b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[i] = y[i]",(t2-t1)/2000.0); 16477c4ece6SBarry Smith 165d3093643SSatish Balay /* ierr = BlastCache();CHKERRQ(ierr); */ 16677c4ece6SBarry Smith 167d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 16877c4ece6SBarry Smith for (i=0; i<2000; i++) { y[i] = x[z[i]]; } 169d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 170b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/2000.0); 17177c4ece6SBarry Smith 172d3093643SSatish Balay /* ierr = BlastCache();CHKERRQ(ierr); */ 17377c4ece6SBarry Smith 174d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 17577c4ece6SBarry Smith for (i=0; i<2000; i++) { x[z[i]] = y[i]; } 176d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 177b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/2000.0); 17877c4ece6SBarry Smith 179d3093643SSatish Balay /* ierr = BlastCache();CHKERRQ(ierr); */ 18077c4ece6SBarry Smith 181d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 18277c4ece6SBarry Smith for (i=0; i<2000; i++) { y[z[i]] = x[zi[i]]; } 183d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 184b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[z[i]] = y[zi[i]]",(t2-t1)/2000.0); 18577c4ece6SBarry Smith 18677c4ece6SBarry Smith 18777c4ece6SBarry Smith PetscRandomDestroy(r); 1883a40ed3dSBarry Smith PetscFunctionReturn(0); 18977c4ece6SBarry Smith } 19077c4ece6SBarry Smith 1914a2ae208SSatish Balay #undef __FUNCT__ 1924a2ae208SSatish Balay #define __FUNCT__ "BlastCache" 193465d0859SSatish Balay int BlastCache(void) 19477c4ece6SBarry Smith { 1959ae0b57aSSatish Balay int i,ierr,n = 1000000; 196ea709b57SSatish Balay PetscScalar *x,*y,*z,*a,*b; 19777c4ece6SBarry Smith 19887828ca2SBarry Smith ierr = PetscMalloc(5*n*sizeof(PetscScalar),&x);CHKERRQ(ierr); 19977c4ece6SBarry Smith y = x + n; 20077c4ece6SBarry Smith z = y + n; 20177c4ece6SBarry Smith a = z + n; 20277c4ece6SBarry Smith b = a + n; 20377c4ece6SBarry Smith 20477c4ece6SBarry Smith for (i=0; i<n; i++) { 20587828ca2SBarry Smith a[i] = (PetscScalar) i; 20687828ca2SBarry Smith y[i] = (PetscScalar) i; 20787828ca2SBarry Smith z[i] = (PetscScalar) i; 20887828ca2SBarry Smith b[i] = (PetscScalar) i; 20987828ca2SBarry Smith x[i] = (PetscScalar) i; 210ba8edd79SBarry Smith } 211ba8edd79SBarry Smith 212ba8edd79SBarry Smith for (i=0; i<n; i++) { 21377c4ece6SBarry Smith a[i] = 3.0*x[i] + 2.0*y[i] + 3.3*z[i] - 25.*b[i]; 21477c4ece6SBarry Smith } 21577c4ece6SBarry Smith for (i=0; i<n; i++) { 21677c4ece6SBarry Smith b[i] = 3.0*x[i] + 2.0*y[i] + 3.3*a[i] - 25.*b[i]; 21777c4ece6SBarry Smith } 21877c4ece6SBarry Smith for (i=0; i<n; i++) { 21977c4ece6SBarry Smith z[i] = 3.0*x[i] + 2.0*y[i] + 3.3*a[i] - 25.*b[i]; 22077c4ece6SBarry Smith } 221606d414cSSatish Balay ierr = PetscFree(x);CHKERRQ(ierr); 2223a40ed3dSBarry Smith PetscFunctionReturn(0); 2231f480b34SSatish Balay } 224