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