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