#include #include int main(int argc, char **argv) { PetscLogDouble x, y; PetscScalar *A, *B; PetscCall(PetscInitialize(&argc, &argv, 0, 0)); PetscCall(PetscCalloc1(8000000, &A)); PetscCall(PetscMalloc1(8000000, &B)); for (i = 0; i < 8000000; i++) { A[i] = i % 61897; B[i] = i % 61897; } /* To take care of paging effects */ PetscCall(PetscArraycpy(A, B, 8000000)); PetscCall(PetscTime(&x)); PetscCall(PetscArraycpy(A, B, 8000000)); PetscCall(PetscTime(&x)); fprintf(stdout, "%s : \n", "PetscMemcpy"); fprintf(stdout, " %-15s : %e MB/s\n", "Bandwidth", 10.0 * 8 * 8 / (y - x)); PetscCall(PetscFree(A)); PetscCall(PetscFree(B)); PetscCall(PetscFinalize()); return 0; }