1 /*$Id: PetscMalloc.c,v 1.28 2001/08/29 20:59:39 balay Exp $*/ 2 3 #include "petsc.h" 4 #include "petscsys.h" 5 6 #undef __FUNCT__ 7 #define __FUNCT__ "main" 8 int main(int argc,char **argv) 9 { 10 PetscLogDouble x,y; 11 double value; 12 void *arr[1000],*dummy; 13 int ierr,i,rand1[1000],rand2[1000]; 14 PetscRandom r; 15 PetscTruth flg; 16 17 PetscInitialize(&argc,&argv,0,0); 18 19 ierr = PetscRandomCreate(PETSC_COMM_SELF,RANDOM_DEFAULT,&r);CHKERRQ(ierr); 20 for (i=0; i<1000; i++) { 21 ierr = PetscRandomGetValue(r,&value);CHKERRQ(ierr); 22 rand1[i] = (int)(value* 144327); 23 ierr = PetscRandomGetValue(r,&value);CHKERRQ(ierr); 24 rand2[i] = (int)(value* 144327); 25 } 26 27 /* Take care of paging effects */ 28 ierr = PetscMalloc(100,&dummy);CHKERRQ(ierr); 29 ierr = PetscFree(dummy);CHKERRQ(ierr); 30 ierr = PetscGetTime(&x);CHKERRQ(ierr); 31 32 /* Do all mallocs */ 33 for (i=0 ; i< 1000; i++) { 34 ierr = PetscMalloc(rand1[i],& arr[i]);CHKERRQ(ierr); 35 } 36 37 ierr = PetscGetTime(&x);CHKERRQ(ierr); 38 39 /* Do some frees */ 40 for (i=0; i< 1000; i+=2) { 41 ierr = PetscFree(arr[i]);CHKERRQ(ierr); 42 } 43 44 /* Do some mallocs */ 45 for (i=0; i< 1000; i+=2) { 46 ierr = PetscMalloc(rand2[i],&arr[i]);CHKERRQ(ierr); 47 } 48 ierr = PetscGetTime(&y);CHKERRQ(ierr); 49 50 for (i=0; i< 1000; i++) { 51 ierr = PetscFree(arr[i]);CHKERRQ(ierr); 52 } 53 54 fprintf(stdout,"%-15s : %e sec, with options : ","PetscMalloc",(y-x)/500.0); 55 if(PetscOptionsHasName(PETSC_NULL,"-trmalloc",&flg),flg) fprintf(stdout,"-trmalloc "); 56 fprintf(stdout,"\n"); 57 58 ierr = PetscRandomDestroy(r);CHKERRQ(ierr); 59 ierr = PetscFinalize();CHKERRQ(ierr); 60 PetscFunctionReturn(0); 61 } 62