xref: /petsc/src/benchmarks/PetscMalloc.c (revision 329f5518e9d4bb7ce96c0c5576cc53785c973973)
1 /*$Id: PetscMalloc.c,v 1.17 1999/11/05 14:48:10 bsmith 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,rand1[1000],rand2[1000];
14   PetscRandom r;
15   PetscTruth  flg;
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   ierr = PetscFree(dummy);CHKERRA(ierr);
30   ierr = PetscGetTime(&x);CHKERRA(ierr);
31 
32   /* Do all mallocs */
33   for (i=0 ; i< 1000; i++) {
34     arr[i] = PetscMalloc(rand1[i]);CHKPTRA(arr[i]);
35   }
36 
37   ierr = PetscGetTime(&x);CHKERRA(ierr);
38 
39   /* Do some frees */
40   for (i=0; i< 1000; i+=2) {
41     ierr = PetscFree(arr[i]);CHKERRA(ierr);
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   ierr = PetscGetTime(&y);CHKERRA(ierr);
49 
50   for (i=0; i< 1000; i++) {
51     ierr = PetscFree(arr[i]);CHKERRA(ierr);
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   PetscFunctionReturn(0);
61 }
62