xref: /petsc/src/benchmarks/PetscMalloc.c (revision 832f73847984dd023cdcdcb50cf91f15c439cac4)
1 
2 #include <petscsys.h>
3 
4 #undef __FUNCT__
5 #define __FUNCT__ "main"
6 int main(int argc,char **argv)
7 {
8   PetscLogDouble  x,y;
9   double      value;
10   void        *arr[1000],*dummy;
11   int         ierr,i,rand1[1000],rand2[1000];
12   PetscRandom r;
13   PetscBool   flg;
14 
15   PetscInitialize(&argc,&argv,0,0);
16 
17   ierr = PetscRandomCreate(PETSC_COMM_SELF,&r);CHKERRQ(ierr);
18   ierr = PetscRandomSetFromOptions(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   ierr = PetscMalloc(100,&dummy);CHKERRQ(ierr);
28   ierr = PetscFree(dummy);CHKERRQ(ierr);
29   ierr = PetscGetTime(&x);CHKERRQ(ierr);
30 
31   /* Do all mallocs */
32   for (i=0 ; i< 1000; i++) {
33     ierr = PetscMalloc(rand1[i],& arr[i]);CHKERRQ(ierr);
34   }
35 
36   ierr = PetscGetTime(&x);CHKERRQ(ierr);
37 
38   /* Do some frees */
39   for (i=0; i< 1000; i+=2) {
40     ierr = PetscFree(arr[i]);CHKERRQ(ierr);
41   }
42 
43   /* Do some mallocs */
44   for (i=0; i< 1000; i+=2) {
45     ierr = PetscMalloc(rand2[i],&arr[i]);CHKERRQ(ierr);
46  }
47   ierr = PetscGetTime(&y);CHKERRQ(ierr);
48 
49   for (i=0; i< 1000; i++) {
50     ierr = PetscFree(arr[i]);CHKERRQ(ierr);
51   }
52 
53   fprintf(stdout,"%-15s : %e sec, with options : ","PetscMalloc",(y-x)/500.0);
54   if(PetscOptionsHasName(PETSC_NULL,"-malloc",&flg),flg) fprintf(stdout,"-malloc ");
55   fprintf(stdout,"\n");
56 
57   ierr = PetscRandomDestroy(&r);CHKERRQ(ierr);
58   ierr = PetscFinalize();
59   PetscFunctionReturn(0);
60 }
61