11f480b34SSatish Balay 2c6db04a5SJed Brown #include <petscsys.h> 3*8563dfccSBarry Smith #include <petsctime.h> 4*8563dfccSBarry Smith 51f480b34SSatish Balay 65a655dc6SBarry Smith extern int BlastCache(void); 75a655dc6SBarry Smith extern int test1(void); 85a655dc6SBarry Smith extern int test2(void); 977c4ece6SBarry Smith 104a2ae208SSatish Balay #undef __FUNCT__ 114a2ae208SSatish Balay #define __FUNCT__ "main" 121f480b34SSatish Balay int main(int argc,char **argv) 131f480b34SSatish Balay { 14dfbe8321SBarry Smith PetscErrorCode ierr; 15d3093643SSatish Balay 1677c4ece6SBarry Smith PetscInitialize(&argc,&argv,0,0); 171f480b34SSatish Balay 18ac355199SBarry Smith ierr = test1();CHKERRQ(ierr); 19ac355199SBarry Smith ierr = test2();CHKERRQ(ierr); 2077c4ece6SBarry Smith 21f3fe499bSBarry Smith ierr = PetscFinalize(); 223a40ed3dSBarry Smith PetscFunctionReturn(0); 2377c4ece6SBarry Smith } 2477c4ece6SBarry Smith 254a2ae208SSatish Balay #undef __FUNCT__ 264a2ae208SSatish Balay #define __FUNCT__ "test1" 27cf256101SBarry Smith int test1(void) 2877c4ece6SBarry Smith { 29b0a32e0cSBarry Smith PetscLogDouble t1,t2; 3047794344SBarry Smith double value; 312758efb8SSatish Balay int i,ierr,*z,*zi,intval; 32ea709b57SSatish Balay PetscScalar *x,*y; 3377c4ece6SBarry Smith PetscRandom r; 3477c4ece6SBarry Smith 35c77d6671SHong Zhang ierr = PetscRandomCreate(PETSC_COMM_SELF,&r);CHKERRQ(ierr); 36c77d6671SHong Zhang ierr = PetscRandomSetFromOptions(r);CHKERRQ(ierr); 3787828ca2SBarry Smith ierr = PetscMalloc(20000*sizeof(PetscScalar),&x);CHKERRQ(ierr); 3887828ca2SBarry Smith ierr = PetscMalloc(20000*sizeof(PetscScalar),&y);CHKERRQ(ierr); 3977c4ece6SBarry Smith 40ac355199SBarry Smith ierr = PetscMalloc(2000*sizeof(int),&z);CHKERRQ(ierr); 41ac355199SBarry Smith ierr = PetscMalloc(2000*sizeof(int),&zi);CHKERRQ(ierr); 4277c4ece6SBarry Smith 4377c4ece6SBarry Smith 441f480b34SSatish Balay 451f480b34SSatish Balay /* Take care of paging effects */ 46*8563dfccSBarry Smith ierr = PetscTime(&t1);CHKERRQ(ierr); 471f480b34SSatish Balay 481f480b34SSatish Balay /* Form the random set of integers */ 4977c4ece6SBarry Smith for (i=0; i<2000; i++) { 5077c4ece6SBarry Smith ierr = PetscRandomGetValue(r,&value);CHKERRQ(ierr); 5177c4ece6SBarry Smith intval = (int)(value*20000.0); 52c9a02da4SSatish Balay z[i] = intval; 531f480b34SSatish Balay } 541f480b34SSatish Balay 5577c4ece6SBarry Smith for (i=0; i<2000; i++) { 5677c4ece6SBarry Smith ierr = PetscRandomGetValue(r,&value);CHKERRQ(ierr); 5777c4ece6SBarry Smith intval = (int)(value*20000.0); 58ba8edd79SBarry Smith zi[i] = intval; 5977c4ece6SBarry Smith } 60b4d8b9abSSatish Balay /* fprintf(stdout,"Done setup\n"); */ 6177c4ece6SBarry Smith 62d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 631f480b34SSatish Balay 64*8563dfccSBarry Smith ierr = PetscTime(&t1);CHKERRQ(ierr); 656f2b61bcSKarl Rupp for (i=0; i<2000; i++) x[i] = y[i]; 66*8563dfccSBarry Smith ierr = PetscTime(&t2);CHKERRQ(ierr); 67b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[i] = y[i]",(t2-t1)/2000.0); 681f480b34SSatish Balay 69d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 701f480b34SSatish Balay 71*8563dfccSBarry Smith ierr = PetscTime(&t1);CHKERRQ(ierr); 72608f96ebSSatish Balay for (i=0; i<500; i+=4) { 73608f96ebSSatish Balay x[i] = y[z[i]]; 74608f96ebSSatish Balay x[1+i] = y[z[1+i]]; 75608f96ebSSatish Balay x[2+i] = y[z[2+i]]; 76608f96ebSSatish Balay x[3+i] = y[z[3+i]]; 77608f96ebSSatish Balay } 78*8563dfccSBarry Smith ierr = PetscTime(&t2);CHKERRQ(ierr); 79b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[i] = y[idx[i]] - unroll 4",(t2-t1)/2000.0); 80608f96ebSSatish Balay 81d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 82608f96ebSSatish Balay 83*8563dfccSBarry Smith ierr = PetscTime(&t1);CHKERRQ(ierr) 846f2b61bcSKarl Rupp for (i=0; i<2000; i++) x[i] = y[z[i]]; 85*8563dfccSBarry Smith ierr = PetscTime(&t2);CHKERRQ(ierr); 86b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/2000.0); 8777c4ece6SBarry Smith 88d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 891f480b34SSatish Balay 90*8563dfccSBarry Smith ierr = PetscTime(&t1);CHKERRQ(ierr); 91608f96ebSSatish Balay for (i=0; i<1000; i+=2) { x[i] = y[z[i]]; x[1+i] = y[z[1+i]]; } 92*8563dfccSBarry Smith ierr = PetscTime(&t2);CHKERRQ(ierr); 93b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[i] = y[idx[i]] - unroll 2",(t2-t1)/2000.0); 94608f96ebSSatish Balay 95d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 96608f96ebSSatish Balay 97*8563dfccSBarry Smith ierr = PetscTime(&t1);CHKERRQ(ierr); 986f2b61bcSKarl Rupp for (i=0; i<2000; i++) x[z[i]] = y[i]; 99*8563dfccSBarry Smith ierr = PetscTime(&t2);CHKERRQ(ierr); 100b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/2000.0); 1011f480b34SSatish Balay 102d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 10377c4ece6SBarry Smith 104*8563dfccSBarry Smith ierr = PetscTime(&t1);CHKERRQ(ierr); 1056f2b61bcSKarl Rupp for (i=0; i<2000; i++) x[z[i]] = y[zi[i]]; 106*8563dfccSBarry Smith ierr = PetscTime(&t2);CHKERRQ(ierr); 107b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[z[i]] = y[zi[i]]",(t2-t1)/2000.0); 10877c4ece6SBarry Smith 109549d3d68SSatish Balay ierr = PetscMemcpy(x,y,10);CHKERRQ(ierr); 110549d3d68SSatish Balay ierr = PetscMemcpy(z,zi,10);CHKERRQ(ierr); 111606d414cSSatish Balay ierr = PetscFree(z);CHKERRQ(ierr); 112606d414cSSatish Balay ierr = PetscFree(zi);CHKERRQ(ierr); 113606d414cSSatish Balay ierr = PetscFree(x);CHKERRQ(ierr); 114606d414cSSatish Balay ierr = PetscFree(y);CHKERRQ(ierr); 11596e147daSBarry Smith ierr = PetscRandomDestroy(&r);CHKERRQ(ierr); 1163a40ed3dSBarry Smith PetscFunctionReturn(0); 11777c4ece6SBarry Smith } 11877c4ece6SBarry Smith 1194a2ae208SSatish Balay #undef __FUNCT__ 1204a2ae208SSatish Balay #define __FUNCT__ "test2" 121cf256101SBarry Smith int test2(void) 12277c4ece6SBarry Smith { 123b0a32e0cSBarry Smith PetscLogDouble t1,t2; 12447794344SBarry Smith double value; 125d3093643SSatish Balay int i,ierr,z[20000],zi[20000],intval,tmp; 126ea709b57SSatish Balay PetscScalar x[20000],y[20000]; 12777c4ece6SBarry Smith PetscRandom r; 12877c4ece6SBarry Smith 129c77d6671SHong Zhang ierr = PetscRandomCreate(PETSC_COMM_SELF,&r);CHKERRQ(ierr); 130c77d6671SHong Zhang ierr = PetscRandomSetFromOptions(r);CHKERRQ(ierr); 13177c4ece6SBarry Smith 13277c4ece6SBarry Smith /* Take care of paging effects */ 133*8563dfccSBarry Smith ierr = PetscTime(&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 } 158b4d8b9abSSatish Balay /* fprintf(stdout,"Done setup\n"); */ 15977c4ece6SBarry Smith 160d3093643SSatish Balay /* ierr = BlastCache();CHKERRQ(ierr); */ 16177c4ece6SBarry Smith 162*8563dfccSBarry Smith ierr = PetscTime(&t1);CHKERRQ(ierr); 1636f2b61bcSKarl Rupp for (i=0; i<2000; i++) x[i] = y[i]; 164*8563dfccSBarry Smith ierr = PetscTime(&t2);CHKERRQ(ierr); 165b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[i] = y[i]",(t2-t1)/2000.0); 16677c4ece6SBarry Smith 167d3093643SSatish Balay /* ierr = BlastCache();CHKERRQ(ierr); */ 16877c4ece6SBarry Smith 169*8563dfccSBarry Smith ierr = PetscTime(&t1);CHKERRQ(ierr); 1706f2b61bcSKarl Rupp for (i=0; i<2000; i++) y[i] = x[z[i]]; 171*8563dfccSBarry Smith ierr = PetscTime(&t2);CHKERRQ(ierr); 172b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/2000.0); 17377c4ece6SBarry Smith 174d3093643SSatish Balay /* ierr = BlastCache();CHKERRQ(ierr); */ 17577c4ece6SBarry Smith 176*8563dfccSBarry Smith ierr = PetscTime(&t1);CHKERRQ(ierr); 1776f2b61bcSKarl Rupp for (i=0; i<2000; i++) x[z[i]] = y[i]; 178*8563dfccSBarry Smith ierr = PetscTime(&t2);CHKERRQ(ierr); 179b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/2000.0); 18077c4ece6SBarry Smith 181d3093643SSatish Balay /* ierr = BlastCache();CHKERRQ(ierr); */ 18277c4ece6SBarry Smith 183*8563dfccSBarry Smith ierr = PetscTime(&t1);CHKERRQ(ierr); 1846f2b61bcSKarl Rupp for (i=0; i<2000; i++) y[z[i]] = x[zi[i]]; 185*8563dfccSBarry Smith ierr = PetscTime(&t2);CHKERRQ(ierr); 186b4d8b9abSSatish Balay fprintf(stdout,"%-27s : %e sec\n","x[z[i]] = y[zi[i]]",(t2-t1)/2000.0); 18777c4ece6SBarry Smith 18877c4ece6SBarry Smith 18996e147daSBarry Smith ierr = PetscRandomDestroy(&r);CHKERRQ(ierr); 1903a40ed3dSBarry Smith PetscFunctionReturn(0); 19177c4ece6SBarry Smith } 19277c4ece6SBarry Smith 1934a2ae208SSatish Balay #undef __FUNCT__ 1944a2ae208SSatish Balay #define __FUNCT__ "BlastCache" 195465d0859SSatish Balay int BlastCache(void) 19677c4ece6SBarry Smith { 1979ae0b57aSSatish Balay int i,ierr,n = 1000000; 198ea709b57SSatish Balay PetscScalar *x,*y,*z,*a,*b; 19977c4ece6SBarry Smith 20087828ca2SBarry Smith ierr = PetscMalloc(5*n*sizeof(PetscScalar),&x);CHKERRQ(ierr); 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++) { 20787828ca2SBarry Smith a[i] = (PetscScalar) i; 20887828ca2SBarry Smith y[i] = (PetscScalar) i; 20987828ca2SBarry Smith z[i] = (PetscScalar) i; 21087828ca2SBarry Smith b[i] = (PetscScalar) i; 21187828ca2SBarry Smith x[i] = (PetscScalar) i; 212ba8edd79SBarry Smith } 213ba8edd79SBarry Smith 2146f2b61bcSKarl Rupp for (i=0; i<n; i++) a[i] = 3.0*x[i] + 2.0*y[i] + 3.3*z[i] - 25.*b[i]; 2156f2b61bcSKarl Rupp for (i=0; i<n; i++) b[i] = 3.0*x[i] + 2.0*y[i] + 3.3*a[i] - 25.*b[i]; 2166f2b61bcSKarl Rupp for (i=0; i<n; i++) z[i] = 3.0*x[i] + 2.0*y[i] + 3.3*a[i] - 25.*b[i]; 217606d414cSSatish Balay ierr = PetscFree(x);CHKERRQ(ierr); 2183a40ed3dSBarry Smith PetscFunctionReturn(0); 2191f480b34SSatish Balay } 220