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