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 CHKERRQ(PetscRandomCreate(PETSC_COMM_SELF,&r)); 17 CHKERRQ(PetscRandomSetFromOptions(r)); 18 for (i=0; i<1000; i++) { 19 CHKERRQ(PetscRandomGetValue(r,&value)); 20 rand1[i] = (int)(value* 144327); 21 CHKERRQ(PetscRandomGetValue(r,&value)); 22 rand2[i] = (int)(value* 144327); 23 } 24 25 /* Take care of paging effects */ 26 CHKERRQ(PetscMalloc1(100,&dummy)); 27 CHKERRQ(PetscFree(dummy)); 28 CHKERRQ(PetscTime(&x)); 29 30 /* Do all mallocs */ 31 for (i=0; i< 1000; i++) { 32 CHKERRQ(PetscMalloc1(rand1[i],&arr[i])); 33 } 34 35 CHKERRQ(PetscTime(&x)); 36 37 /* Do some frees */ 38 for (i=0; i< 1000; i+=2) { 39 CHKERRQ(PetscFree(arr[i])); 40 } 41 42 /* Do some mallocs */ 43 for (i=0; i< 1000; i+=2) { 44 CHKERRQ(PetscMalloc1(rand2[i],&arr[i])); 45 } 46 CHKERRQ(PetscTime(&y)); 47 48 for (i=0; i< 1000; i++) { 49 CHKERRQ(PetscFree(arr[i])); 50 } 51 52 fprintf(stdout,"%-15s : %e sec, with options : ","PetscMalloc",(y-x)/500.0); 53 CHKERRQ(PetscOptionsHasName(NULL,"-malloc",&flg)); 54 if (flg) fprintf(stdout,"-malloc "); 55 fprintf(stdout,"\n"); 56 57 CHKERRQ(PetscRandomDestroy(&r)); 58 ierr = PetscFinalize(); 59 return ierr; 60 } 61