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