1 #include <petscsys.h>
2 #include <petsctime.h>
3
main(int argc,char ** argv)4 int main(int argc, char **argv)
5 {
6 PetscLogDouble x, y, z;
7 PetscScalar A[10000], B[10000];
8 PetscInt i;
9 PetscBool flg;
10
11 PetscCall(PetscInitialize(&argc, &argv, 0, 0));
12 for (i = 0; i < 10000; i++) {
13 A[i] = i % 61897;
14 B[i] = i % 61897;
15 }
16 /* To take care of paging effects */
17 PetscMemcmp(A, B, sizeof(PetscScalar) * 0, &flg);
18 PetscCall(PetscTime(&x));
19
20 PetscCall(PetscTime(&x));
21 PetscMemcmp(A, B, sizeof(PetscScalar) * 10000, &flg);
22 PetscMemcmp(A, B, sizeof(PetscScalar) * 10000, &flg);
23 PetscMemcmp(A, B, sizeof(PetscScalar) * 10000, &flg);
24 PetscMemcmp(A, B, sizeof(PetscScalar) * 10000, &flg);
25 PetscMemcmp(A, B, sizeof(PetscScalar) * 10000, &flg);
26 PetscMemcmp(A, B, sizeof(PetscScalar) * 10000, &flg);
27 PetscMemcmp(A, B, sizeof(PetscScalar) * 10000, &flg);
28 PetscMemcmp(A, B, sizeof(PetscScalar) * 10000, &flg);
29 PetscMemcmp(A, B, sizeof(PetscScalar) * 10000, &flg);
30 PetscMemcmp(A, B, sizeof(PetscScalar) * 10000, &flg);
31 PetscCall(PetscTime(&y));
32 PetscMemcmp(A, B, sizeof(PetscScalar) * 0, &flg);
33 PetscMemcmp(A, B, sizeof(PetscScalar) * 0, &flg);
34 PetscMemcmp(A, B, sizeof(PetscScalar) * 0, &flg);
35 PetscMemcmp(A, B, sizeof(PetscScalar) * 0, &flg);
36 PetscMemcmp(A, B, sizeof(PetscScalar) * 0, &flg);
37 PetscMemcmp(A, B, sizeof(PetscScalar) * 0, &flg);
38 PetscMemcmp(A, B, sizeof(PetscScalar) * 0, &flg);
39 PetscMemcmp(A, B, sizeof(PetscScalar) * 0, &flg);
40 PetscMemcmp(A, B, sizeof(PetscScalar) * 0, &flg);
41 PetscMemcmp(A, B, sizeof(PetscScalar) * 0, &flg);
42 PetscCall(PetscTime(&z));
43
44 fprintf(stdout, "%s : \n", "PetscMemcmp");
45 fprintf(stdout, " %-15s : %e sec\n", "Latency", (z - y) / 10.0);
46 fprintf(stdout, " %-15s : %e sec\n", "Per PetscScalar", (2 * y - x - z) / 100000);
47
48 PetscCall(PetscFinalize());
49 return 0;
50 }
51