xref: /petsc/src/benchmarks/PetscMalloc.c (revision 40badf4fbc550ac1f60bd080eaff6de6d55b946d)
1 
2 #include <petscsys.h>
3 #include <petsctime.h>
4 
5 int main(int argc,char **argv)
6 {
7   PetscLogDouble x,y;
8   double         value;
9   void           *arr[1000],*dummy;
10   int            i,rand1[1000],rand2[1000];
11   PetscErrorCode ierr;
12   PetscRandom    r;
13   PetscBool      flg;
14 
15   ierr = PetscInitialize(&argc,&argv,0,0);if (ierr) return ierr;
16   CHKERRQ(PetscRandomCreate(PETSC_COMM_SELF,&r));
17   CHKERRQ(PetscRandomSetFromOptions(r));
18   for (i=0; i<1000; i++) {
19     CHKERRQ(PetscRandomGetValue(r,&value));
20     rand1[i] = (int)(value* 144327);
21     CHKERRQ(PetscRandomGetValue(r,&value));
22     rand2[i] = (int)(value* 144327);
23   }
24 
25   /* Take care of paging effects */
26   CHKERRQ(PetscMalloc1(100,&dummy));
27   CHKERRQ(PetscFree(dummy));
28   CHKERRQ(PetscTime(&x));
29 
30   /* Do all mallocs */
31   for (i=0; i< 1000; i++) {
32     CHKERRQ(PetscMalloc1(rand1[i],&arr[i]));
33   }
34 
35   CHKERRQ(PetscTime(&x));
36 
37   /* Do some frees */
38   for (i=0; i< 1000; i+=2) {
39     CHKERRQ(PetscFree(arr[i]));
40   }
41 
42   /* Do some mallocs */
43   for (i=0; i< 1000; i+=2) {
44     CHKERRQ(PetscMalloc1(rand2[i],&arr[i]));
45   }
46   CHKERRQ(PetscTime(&y));
47 
48   for (i=0; i< 1000; i++) {
49     CHKERRQ(PetscFree(arr[i]));
50   }
51 
52   fprintf(stdout,"%-15s : %e sec, with options : ","PetscMalloc",(y-x)/500.0);
53   CHKERRQ(PetscOptionsHasName(NULL,"-malloc",&flg));
54   if (flg) fprintf(stdout,"-malloc ");
55   fprintf(stdout,"\n");
56 
57   CHKERRQ(PetscRandomDestroy(&r));
58   ierr = PetscFinalize();
59   return ierr;
60 }
61