Actual source code: PetscMemcpy.c

  1: #include <petscsys.h>
  2: #include <petsctime.h>

  4: int main(int argc,char **argv)
  5: {
  6:   PetscLogDouble x,y;
  7:   PetscScalar    *A,*B;

  9:   PetscCall(PetscInitialize(&argc,&argv,0,0));
 10:   PetscCall(PetscCalloc1(8000000,&A));
 11:   PetscCall(PetscMalloc1(8000000,&B));

 13:   for (i=0; i<8000000; i++) {
 14:     A[i] = i%61897;
 15:     B[i] = i%61897;
 16:   }
 17:   /* To take care of paging effects */
 18:   PetscCall(PetscArraycpy(A,B,8000000));
 19:   PetscCall(PetscTime(&x));
 20:   PetscCall(PetscArraycpy(A,B,8000000));
 21:   PetscCall(PetscTime(&x));

 23:   fprintf(stdout,"%s : \n","PetscMemcpy");
 24:   fprintf(stdout,"    %-15s : %e MB/s\n","Bandwidth",10.0*8*8/(y-x));

 26:   PetscCall(PetscFree(A));
 27:   PetscCall(PetscFree(B));
 28:   PetscCall(PetscFinalize());
 29:   return 0;
 30: }