1*ea709b57SSatish Balay /*$Id: Index.c,v 1.32 2001/08/06 21:19:06 bsmith Exp balay $*/ 21f480b34SSatish Balay 31f480b34SSatish Balay #include "petsc.h" 4e090d566SSatish Balay #include "petscsys.h" 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 { 14d3093643SSatish Balay int 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 212b7fea2aSSatish Balay ierr = PetscFinalize();CHKERRQ(ierr); 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; 32*ea709b57SSatish Balay PetscScalar *x,*y; 3377c4ece6SBarry Smith PetscRandom r; 3477c4ece6SBarry Smith 35029af93fSBarry Smith ierr = PetscRandomCreate(PETSC_COMM_SELF,RANDOM_DEFAULT,&r);CHKERRQ(ierr); 3687828ca2SBarry Smith ierr = PetscMalloc(20000*sizeof(PetscScalar),&x);CHKERRQ(ierr); 3787828ca2SBarry Smith ierr = PetscMalloc(20000*sizeof(PetscScalar),&y);CHKERRQ(ierr); 3877c4ece6SBarry Smith 39ac355199SBarry Smith ierr = PetscMalloc(2000*sizeof(int),&z);CHKERRQ(ierr); 40ac355199SBarry Smith ierr = PetscMalloc(2000*sizeof(int),&zi);CHKERRQ(ierr); 4177c4ece6SBarry Smith 4277c4ece6SBarry Smith 431f480b34SSatish Balay 441f480b34SSatish Balay /* Take care of paging effects */ 45d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 461f480b34SSatish Balay 471f480b34SSatish Balay /* Form the random set of integers */ 4877c4ece6SBarry Smith for (i=0; i<2000; i++) { 4977c4ece6SBarry Smith ierr = PetscRandomGetValue(r,&value);CHKERRQ(ierr); 5077c4ece6SBarry Smith intval = (int)(value*20000.0); 51c9a02da4SSatish Balay z[i] = intval; 521f480b34SSatish Balay } 531f480b34SSatish Balay 5477c4ece6SBarry Smith for (i=0; i<2000; i++) { 5577c4ece6SBarry Smith ierr = PetscRandomGetValue(r,&value);CHKERRQ(ierr); 5677c4ece6SBarry Smith intval = (int)(value*20000.0); 57ba8edd79SBarry Smith zi[i] = intval; 5877c4ece6SBarry Smith } 5977c4ece6SBarry Smith fprintf(stderr,"Done setup\n"); 6077c4ece6SBarry Smith 61d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 621f480b34SSatish Balay 63d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 6477c4ece6SBarry Smith for (i=0; i<2000; i++) { x[i] = y[i]; } 65d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 6677c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[i] = y[i]",(t2-t1)/2000.0); 671f480b34SSatish Balay 68d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 691f480b34SSatish Balay 70d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 71608f96ebSSatish Balay for (i=0; i<500; i+=4) { 72608f96ebSSatish Balay x[i] = y[z[i]]; 73608f96ebSSatish Balay x[1+i] = y[z[1+i]]; 74608f96ebSSatish Balay x[2+i] = y[z[2+i]]; 75608f96ebSSatish Balay x[3+i] = y[z[3+i]]; 76608f96ebSSatish Balay } 77d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 78608f96ebSSatish Balay fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]] - unroll 4",(t2-t1)/2000.0); 79608f96ebSSatish Balay 80d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 81608f96ebSSatish Balay 82d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr) 8377c4ece6SBarry Smith for (i=0; i<2000; i++) { x[i] = y[z[i]]; } 84d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 8577c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]]",(t2-t1)/2000.0); 8677c4ece6SBarry Smith 87d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 881f480b34SSatish Balay 89d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 90608f96ebSSatish Balay for (i=0; i<1000; i+=2) { x[i] = y[z[i]]; x[1+i] = y[z[1+i]]; } 91d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 92608f96ebSSatish Balay fprintf(stderr,"%-19s : %e sec\n","x[i] = y[idx[i]] - unroll 2",(t2-t1)/2000.0); 93608f96ebSSatish Balay 94d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 95608f96ebSSatish Balay 96d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 9777c4ece6SBarry Smith for (i=0; i<2000; i++) { x[z[i]] = y[i]; } 98d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 9977c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[i]",(t2-t1)/2000.0); 1001f480b34SSatish Balay 101d3093643SSatish Balay ierr = BlastCache();CHKERRQ(ierr); 10277c4ece6SBarry Smith 103d3093643SSatish Balay ierr = PetscGetTime(&t1);CHKERRQ(ierr); 10477c4ece6SBarry Smith for (i=0; i<2000; i++) { x[z[i]] = y[zi[i]]; } 105d3093643SSatish Balay ierr = PetscGetTime(&t2);CHKERRQ(ierr); 10677c4ece6SBarry Smith fprintf(stderr,"%-19s : %e sec\n","x[z[i]] = y[zi[i]]",(t2-t1)/2000.0); 10777c4ece6SBarry Smith 108549d3d68SSatish Balay ierr = PetscMemcpy(x,y,10);CHKERRQ(ierr); 109549d3d68SSatish Balay ierr = PetscMemcpy(z,zi,10);CHKERRQ(ierr); 110606d414cSSatish Balay ierr = PetscFree(z);CHKERRQ(ierr); 111606d414cSSatish Balay ierr = PetscFree(zi);CHKERRQ(ierr); 112606d414cSSatish Balay ierr = PetscFree(x);CHKERRQ(ierr); 113606d414cSSatish Balay ierr = PetscFree(y);CHKERRQ(ierr); 11477c4ece6SBarry Smith PetscRandomDestroy(r); 1153a40ed3dSBarry Smith PetscFunctionReturn(0); 11677c4ece6SBarry Smith } 11777c4ece6SBarry Smith 1184a2ae208SSatish Balay #undef __FUNCT__ 1194a2ae208SSatish Balay #define __FUNCT__ "test2" 120cf256101SBarry Smith int test2(void) 12177c4ece6SBarry Smith { 122b0a32e0cSBarry Smith PetscLogDouble t1,t2; 12347794344SBarry Smith double value; 124d3093643SSatish Balay int i,ierr,z[20000],zi[20000],intval,tmp; 125*ea709b57SSatish Balay PetscScalar x[20000],y[20000]; 12677c4ece6SBarry Smith PetscRandom r; 12777c4ece6SBarry Smith 128029af93fSBarry Smith ierr = PetscRandomCreate(PETSC_COMM_SELF,RANDOM_DEFAULT,&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 } 15677c4ece6SBarry Smith fprintf(stderr,"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); 16377c4ece6SBarry Smith fprintf(stderr,"%-19s : %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); 17077c4ece6SBarry Smith fprintf(stderr,"%-19s : %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); 17777c4ece6SBarry Smith fprintf(stderr,"%-19s : %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); 18477c4ece6SBarry Smith fprintf(stderr,"%-19s : %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 { 19577c4ece6SBarry Smith int i,n = 1000000; 196*ea709b57SSatish 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