xref: /petsc/src/benchmarks/PetscMalloc.c (revision 8563dfcc547dae59d5e1dc6b8e602db41cb72b14)
1d8e9fea7SSatish Balay 
2c6db04a5SJed Brown #include <petscsys.h>
3*8563dfccSBarry Smith #include <petsctime.h>
4173c0623SSatish Balay 
54a2ae208SSatish Balay #undef __FUNCT__
64a2ae208SSatish Balay #define __FUNCT__ "main"
7173c0623SSatish Balay int main(int argc,char **argv)
8173c0623SSatish Balay {
9b0a32e0cSBarry Smith   PetscLogDouble x,y;
1047794344SBarry Smith   double         value;
1198d6af09SSatish Balay   void           *arr[1000],*dummy;
12f1af5d2fSBarry Smith   int            ierr,i,rand1[1000],rand2[1000];
1377c4ece6SBarry Smith   PetscRandom    r;
14ace3abfcSBarry Smith   PetscBool      flg;
15173c0623SSatish Balay 
1677c4ece6SBarry Smith   PetscInitialize(&argc,&argv,0,0);
17173c0623SSatish Balay 
18c77d6671SHong Zhang   ierr = PetscRandomCreate(PETSC_COMM_SELF,&r);CHKERRQ(ierr);
19c77d6671SHong Zhang   ierr = PetscRandomSetFromOptions(r);CHKERRQ(ierr);
20173c0623SSatish Balay   for (i=0; i<1000; i++) {
2177c4ece6SBarry Smith     ierr     = PetscRandomGetValue(r,&value);CHKERRQ(ierr);
22173c0623SSatish Balay     rand1[i] = (int)(value* 144327);
2377c4ece6SBarry Smith     ierr     = PetscRandomGetValue(r,&value);CHKERRQ(ierr);
24173c0623SSatish Balay     rand2[i] = (int)(value* 144327);
25173c0623SSatish Balay   }
26173c0623SSatish Balay 
2798d6af09SSatish Balay   /* Take care of paging effects */
28ac355199SBarry Smith   ierr = PetscMalloc(100,&dummy);CHKERRQ(ierr);
29ac355199SBarry Smith   ierr = PetscFree(dummy);CHKERRQ(ierr);
30*8563dfccSBarry Smith   ierr = PetscTime(&x);CHKERRQ(ierr);
3198d6af09SSatish Balay 
32173c0623SSatish Balay   /* Do all mallocs */
33173c0623SSatish Balay   for (i=0; i< 1000; i++) {
34ac355199SBarry Smith     ierr = PetscMalloc(rand1[i],&arr[i]);CHKERRQ(ierr);
35173c0623SSatish Balay   }
36173c0623SSatish Balay 
37*8563dfccSBarry Smith   ierr = PetscTime(&x);CHKERRQ(ierr);
38173c0623SSatish Balay 
39173c0623SSatish Balay   /* Do some frees */
40173c0623SSatish Balay   for (i=0; i< 1000; i+=2) {
41ac355199SBarry Smith     ierr = PetscFree(arr[i]);CHKERRQ(ierr);
42173c0623SSatish Balay   }
43173c0623SSatish Balay 
44173c0623SSatish Balay   /* Do some mallocs */
45173c0623SSatish Balay   for (i=0; i< 1000; i+=2) {
46ac355199SBarry Smith     ierr = PetscMalloc(rand2[i],&arr[i]);CHKERRQ(ierr);
47173c0623SSatish Balay   }
48*8563dfccSBarry Smith   ierr = PetscTime(&y);CHKERRQ(ierr);
49173c0623SSatish Balay 
50173c0623SSatish Balay   for (i=0; i< 1000; i++) {
51ac355199SBarry Smith     ierr = PetscFree(arr[i]);CHKERRQ(ierr);
52173c0623SSatish Balay   }
53173c0623SSatish Balay 
54b4d8b9abSSatish Balay   fprintf(stdout,"%-15s : %e sec, with options : ","PetscMalloc",(y-x)/500.0);
550298fd71SBarry Smith   ierr = PetscOptionsHasName(NULL,"-malloc",&flg);CHKERRQ(ierr);
568caf3d72SBarry Smith   if (flg) fprintf(stdout,"-malloc ");
57b4d8b9abSSatish Balay   fprintf(stdout,"\n");
58173c0623SSatish Balay 
59fcfd50ebSBarry Smith   ierr = PetscRandomDestroy(&r);CHKERRQ(ierr);
60f3fe499bSBarry Smith   ierr = PetscFinalize();
613a40ed3dSBarry Smith   PetscFunctionReturn(0);
62173c0623SSatish Balay }
63