Actual source code: PetscMalloc.c


  2: #include <petscsys.h>
  3: #include <petsctime.h>

  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:   PetscRandom    r;
 12:   PetscBool      flg;

 14:   PetscInitialize(&argc,&argv,0,0);
 15:   PetscRandomCreate(PETSC_COMM_SELF,&r);
 16:   PetscRandomSetFromOptions(r);
 17:   for (i=0; i<1000; i++) {
 18:     PetscRandomGetValue(r,&value);
 19:     rand1[i] = (int)(value* 144327);
 20:     PetscRandomGetValue(r,&value);
 21:     rand2[i] = (int)(value* 144327);
 22:   }

 24:   /* Take care of paging effects */
 25:   PetscMalloc1(100,&dummy);
 26:   PetscFree(dummy);
 27:   PetscTime(&x);

 29:   /* Do all mallocs */
 30:   for (i=0; i< 1000; i++) {
 31:     PetscMalloc1(rand1[i],&arr[i]);
 32:   }

 34:   PetscTime(&x);

 36:   /* Do some frees */
 37:   for (i=0; i< 1000; i+=2) {
 38:     PetscFree(arr[i]);
 39:   }

 41:   /* Do some mallocs */
 42:   for (i=0; i< 1000; i+=2) {
 43:     PetscMalloc1(rand2[i],&arr[i]);
 44:   }
 45:   PetscTime(&y);

 47:   for (i=0; i< 1000; i++) {
 48:     PetscFree(arr[i]);
 49:   }

 51:   fprintf(stdout,"%-15s : %e sec, with options : ","PetscMalloc",(y-x)/500.0);
 52:   PetscOptionsHasName(NULL,"-malloc",&flg);
 53:   if (flg) fprintf(stdout,"-malloc ");
 54:   fprintf(stdout,"\n");

 56:   PetscRandomDestroy(&r);
 57:   PetscFinalize();
 58:   return 0;
 59: }