xref: /petsc/src/benchmarks/PetscMalloc.c (revision 9566063d113dddea24716c546802770db7481bc0)
1d8e9fea7SSatish Balay 
2c6db04a5SJed Brown #include <petscsys.h>
38563dfccSBarry Smith #include <petsctime.h>
4173c0623SSatish Balay 
5173c0623SSatish Balay int main(int argc,char **argv)
6173c0623SSatish Balay {
7b0a32e0cSBarry Smith   PetscLogDouble x,y;
847794344SBarry Smith   double         value;
998d6af09SSatish Balay   void           *arr[1000],*dummy;
10a438ae71SBarry Smith   int            i,rand1[1000],rand2[1000];
1177c4ece6SBarry Smith   PetscRandom    r;
12ace3abfcSBarry Smith   PetscBool      flg;
13173c0623SSatish Balay 
14*9566063dSJacob Faibussowitsch   PetscCall(PetscInitialize(&argc,&argv,0,0));
15*9566063dSJacob Faibussowitsch   PetscCall(PetscRandomCreate(PETSC_COMM_SELF,&r));
16*9566063dSJacob Faibussowitsch   PetscCall(PetscRandomSetFromOptions(r));
17173c0623SSatish Balay   for (i=0; i<1000; i++) {
18*9566063dSJacob Faibussowitsch     PetscCall(PetscRandomGetValue(r,&value));
19173c0623SSatish Balay     rand1[i] = (int)(value* 144327);
20*9566063dSJacob Faibussowitsch     PetscCall(PetscRandomGetValue(r,&value));
21173c0623SSatish Balay     rand2[i] = (int)(value* 144327);
22173c0623SSatish Balay   }
23173c0623SSatish Balay 
2498d6af09SSatish Balay   /* Take care of paging effects */
25*9566063dSJacob Faibussowitsch   PetscCall(PetscMalloc1(100,&dummy));
26*9566063dSJacob Faibussowitsch   PetscCall(PetscFree(dummy));
27*9566063dSJacob Faibussowitsch   PetscCall(PetscTime(&x));
2898d6af09SSatish Balay 
29173c0623SSatish Balay   /* Do all mallocs */
30173c0623SSatish Balay   for (i=0; i< 1000; i++) {
31*9566063dSJacob Faibussowitsch     PetscCall(PetscMalloc1(rand1[i],&arr[i]));
32173c0623SSatish Balay   }
33173c0623SSatish Balay 
34*9566063dSJacob Faibussowitsch   PetscCall(PetscTime(&x));
35173c0623SSatish Balay 
36173c0623SSatish Balay   /* Do some frees */
37173c0623SSatish Balay   for (i=0; i< 1000; i+=2) {
38*9566063dSJacob Faibussowitsch     PetscCall(PetscFree(arr[i]));
39173c0623SSatish Balay   }
40173c0623SSatish Balay 
41173c0623SSatish Balay   /* Do some mallocs */
42173c0623SSatish Balay   for (i=0; i< 1000; i+=2) {
43*9566063dSJacob Faibussowitsch     PetscCall(PetscMalloc1(rand2[i],&arr[i]));
44173c0623SSatish Balay   }
45*9566063dSJacob Faibussowitsch   PetscCall(PetscTime(&y));
46173c0623SSatish Balay 
47173c0623SSatish Balay   for (i=0; i< 1000; i++) {
48*9566063dSJacob Faibussowitsch     PetscCall(PetscFree(arr[i]));
49173c0623SSatish Balay   }
50173c0623SSatish Balay 
51b4d8b9abSSatish Balay   fprintf(stdout,"%-15s : %e sec, with options : ","PetscMalloc",(y-x)/500.0);
52*9566063dSJacob Faibussowitsch   PetscCall(PetscOptionsHasName(NULL,"-malloc",&flg));
538caf3d72SBarry Smith   if (flg) fprintf(stdout,"-malloc ");
54b4d8b9abSSatish Balay   fprintf(stdout,"\n");
55173c0623SSatish Balay 
56*9566063dSJacob Faibussowitsch   PetscCall(PetscRandomDestroy(&r));
57*9566063dSJacob Faibussowitsch   PetscCall(PetscFinalize());
58b122ec5aSJacob Faibussowitsch   return 0;
59173c0623SSatish Balay }
60