1 2 #include "petscsys.h" 3 4 #undef __FUNCT__ 5 #define __FUNCT__ "main" 6 int main(int argc,char **argv) 7 { 8 PetscLogDouble x,y; 9 double value; 10 void *arr[1000],*dummy; 11 int ierr,i,rand1[1000],rand2[1000]; 12 PetscRandom r; 13 PetscTruth flg; 14 15 PetscInitialize(&argc,&argv,0,0); 16 17 ierr = PetscRandomCreate(PETSC_COMM_SELF,&r);CHKERRQ(ierr); 18 ierr = PetscRandomSetFromOptions(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