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