Actual source code: PetscMalloc.c
2: #include <petscsys.h>
3: #include <petsctime.h>
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: PetscRandom r;
12: PetscBool flg;
14: PetscInitialize(&argc,&argv,0,0);
15: PetscRandomCreate(PETSC_COMM_SELF,&r);
16: PetscRandomSetFromOptions(r);
17: for (i=0; i<1000; i++) {
18: PetscRandomGetValue(r,&value);
19: rand1[i] = (int)(value* 144327);
20: PetscRandomGetValue(r,&value);
21: rand2[i] = (int)(value* 144327);
22: }
24: /* Take care of paging effects */
25: PetscMalloc1(100,&dummy);
26: PetscFree(dummy);
27: PetscTime(&x);
29: /* Do all mallocs */
30: for (i=0; i< 1000; i++) {
31: PetscMalloc1(rand1[i],&arr[i]);
32: }
34: PetscTime(&x);
36: /* Do some frees */
37: for (i=0; i< 1000; i+=2) {
38: PetscFree(arr[i]);
39: }
41: /* Do some mallocs */
42: for (i=0; i< 1000; i+=2) {
43: PetscMalloc1(rand2[i],&arr[i]);
44: }
45: PetscTime(&y);
47: for (i=0; i< 1000; i++) {
48: PetscFree(arr[i]);
49: }
51: fprintf(stdout,"%-15s : %e sec, with options : ","PetscMalloc",(y-x)/500.0);
52: PetscOptionsHasName(NULL,"-malloc",&flg);
53: if (flg) fprintf(stdout,"-malloc ");
54: fprintf(stdout,"\n");
56: PetscRandomDestroy(&r);
57: PetscFinalize();
58: return 0;
59: }