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