xref: /petsc/src/benchmarks/PetscMemcpy.c (revision abdd934af67c1cc360c4d0cfcf2de16e188d627e)
1c6db04a5SJed Brown #include <petscsys.h>
28563dfccSBarry Smith #include <petsctime.h>
3b0878937SSatish Balay 
main(int argc,char ** argv)4b0878937SSatish Balay int main(int argc, char **argv)
5b0878937SSatish Balay {
6580bdb30SBarry Smith   PetscLogDouble x, y;
7ea709b57SSatish Balay   PetscScalar   *A, *B;
8b0878937SSatish Balay 
9*9566063dSJacob Faibussowitsch   PetscCall(PetscInitialize(&argc, &argv, 0, 0));
10*9566063dSJacob Faibussowitsch   PetscCall(PetscCalloc1(8000000, &A));
11*9566063dSJacob Faibussowitsch   PetscCall(PetscMalloc1(8000000, &B));
12e24b481bSBarry Smith 
13e24b481bSBarry Smith   for (i = 0; i < 8000000; i++) {
14b0878937SSatish Balay     A[i] = i % 61897;
15b0878937SSatish Balay     B[i] = i % 61897;
16b0878937SSatish Balay   }
17b0878937SSatish Balay   /* To take care of paging effects */
18*9566063dSJacob Faibussowitsch   PetscCall(PetscArraycpy(A, B, 8000000));
19*9566063dSJacob Faibussowitsch   PetscCall(PetscTime(&x));
20*9566063dSJacob Faibussowitsch   PetscCall(PetscArraycpy(A, B, 8000000));
21*9566063dSJacob Faibussowitsch   PetscCall(PetscTime(&x));
22b0878937SSatish Balay 
2335d8aa7fSBarry Smith   fprintf(stdout, "%s : \n", "PetscMemcpy");
24b4d8b9abSSatish Balay   fprintf(stdout, "    %-15s : %e MB/s\n", "Bandwidth", 10.0 * 8 * 8 / (y - x));
25b0878937SSatish Balay 
26*9566063dSJacob Faibussowitsch   PetscCall(PetscFree(A));
27*9566063dSJacob Faibussowitsch   PetscCall(PetscFree(B));
28*9566063dSJacob Faibussowitsch   PetscCall(PetscFinalize());
29b122ec5aSJacob Faibussowitsch   return 0;
30b0878937SSatish Balay }
31