xref: /petsc/src/benchmarks/PetscMalloc.c (revision 0a26283d1301e05d8f755acbfd4e3dbe54316b6b)
1173c0623SSatish Balay #include "stdio.h"
2173c0623SSatish Balay #include "petsc.h"
3173c0623SSatish Balay #include "sys.h"
4173c0623SSatish Balay 
5173c0623SSatish Balay int main( int argc, char **argv)
6173c0623SSatish Balay {
7173c0623SSatish Balay   double   x, y, value;
898d6af09SSatish Balay   void     *arr[1000], *dummy;
9173c0623SSatish Balay   int      ierr, i, flg, rand1[1000], rand2[1000];
10173c0623SSatish Balay   SYRandom r;
11173c0623SSatish Balay 
12173c0623SSatish Balay   PetscInitialize(&argc, &argv,0,0,0);
13173c0623SSatish Balay 
14173c0623SSatish Balay   ierr = SYRandomCreate( MPI_COMM_SELF,RANDOM_DEFAULT,&r); CHKERRQ(ierr);
15173c0623SSatish Balay   for (i=0; i<1000; i++) {
16173c0623SSatish Balay     ierr    = SYRandomGetValue(r, &value); CHKERRQ(ierr);
17173c0623SSatish Balay     rand1[i] = (int ) (value* 144327);
18173c0623SSatish Balay     ierr    = SYRandomGetValue(r, &value); CHKERRQ(ierr);
19173c0623SSatish Balay     rand2[i] = (int ) (value* 144327);
20173c0623SSatish Balay   }
21173c0623SSatish Balay 
2298d6af09SSatish Balay   /* Take care of paging effects */
2398d6af09SSatish Balay   dummy = PetscMalloc(100); CHKPTRA(dummy);
2498d6af09SSatish Balay   PetscFree(dummy);
25*0a26283dSSatish Balay   x = PetscGetTime();
2698d6af09SSatish Balay 
27173c0623SSatish Balay   /* Do all mallocs */
28173c0623SSatish Balay   for (i=0 ; i< 1000; i++) {
29173c0623SSatish Balay     arr[i] = PetscMalloc(rand1[i]); CHKPTRA( arr[i]);
30173c0623SSatish Balay   }
31173c0623SSatish Balay 
32173c0623SSatish Balay   x = PetscGetTime();
33173c0623SSatish Balay 
34173c0623SSatish Balay   /* Do some frees */
35173c0623SSatish Balay   for (i=0; i< 1000; i+=2) {
36173c0623SSatish Balay     PetscFree(arr[i]);
37173c0623SSatish Balay   }
38173c0623SSatish Balay 
39173c0623SSatish Balay   /* Do some mallocs */
40173c0623SSatish Balay   for (i=0; i< 1000; i+=2) {
41173c0623SSatish Balay     arr[i] = PetscMalloc(rand2[i]); CHKPTRA( arr[i]);
42173c0623SSatish Balay  }
43173c0623SSatish Balay   y = PetscGetTime();
44173c0623SSatish Balay 
45173c0623SSatish Balay   for (i=0; i< 1000; i++) {
46173c0623SSatish Balay     PetscFree(arr[i]);
47173c0623SSatish Balay   }
48173c0623SSatish Balay 
49c0e5a298SSatish Balay   fprintf(stderr,"%-15s : %e sec , with options : ","PetscMalloc",(y-x)/500.0);
50173c0623SSatish Balay   if(OptionsHasName(PETSC_NULL,"-trmalloc",&flg),flg) fprintf(stderr,"-trmalloc ");
51173c0623SSatish Balay   fprintf(stderr,"\n");
52173c0623SSatish Balay 
53173c0623SSatish Balay   SYRandomDestroy(r);
54173c0623SSatish Balay   PetscFinalize();
55173c0623SSatish Balay   return 0;
56173c0623SSatish Balay }
57