xref: /petsc/src/benchmarks/PetscMalloc.c (revision 029af93f72d387caa45cf6909ac9aed2d04296ca)
1 #ifndef lint
2 static char vcid[] = "$Id: PetscMalloc.c,v 1.8 1997/03/09 18:00:35 bsmith Exp bsmith $";
3 #endif
4 
5 #include "stdio.h"
6 #include "petsc.h"
7 #include "sys.h"
8 
9 int main( int argc, char **argv)
10 {
11   PLogDouble  x, y;
12   double      value;
13   void        *arr[1000], *dummy;
14   int         ierr, i, flg, rand1[1000], rand2[1000];
15   PetscRandom r;
16 
17   PetscInitialize(&argc, &argv,0,0);
18 
19   ierr = PetscRandomCreate( PETSC_COMM_SELF,RANDOM_DEFAULT,&r); CHKERRQ(ierr);
20   for (i=0; i<1000; i++) {
21     ierr    = PetscRandomGetValue(r, &value); CHKERRQ(ierr);
22     rand1[i] = (int ) (value* 144327);
23     ierr    = PetscRandomGetValue(r, &value); CHKERRQ(ierr);
24     rand2[i] = (int ) (value* 144327);
25   }
26 
27   /* Take care of paging effects */
28   dummy = PetscMalloc(100); CHKPTRA(dummy);
29   PetscFree(dummy);
30   x = PetscGetTime();
31 
32   /* Do all mallocs */
33   for (i=0 ; i< 1000; i++) {
34     arr[i] = PetscMalloc(rand1[i]); CHKPTRA( arr[i]);
35   }
36 
37   x = PetscGetTime();
38 
39   /* Do some frees */
40   for (i=0; i< 1000; i+=2) {
41     PetscFree(arr[i]);
42   }
43 
44   /* Do some mallocs */
45   for (i=0; i< 1000; i+=2) {
46     arr[i] = PetscMalloc(rand2[i]); CHKPTRA( arr[i]);
47  }
48   y = PetscGetTime();
49 
50   for (i=0; i< 1000; i++) {
51     PetscFree(arr[i]);
52   }
53 
54   fprintf(stderr,"%-15s : %e sec , with options : ","PetscMalloc",(y-x)/500.0);
55   if(OptionsHasName(PETSC_NULL,"-trmalloc",&flg),flg) fprintf(stderr,"-trmalloc ");
56   fprintf(stderr,"\n");
57 
58   PetscRandomDestroy(r);
59   PetscFinalize();
60   return 0;
61 }
62