/* Last edited on 2008-02-16 11:21:59 by stolfi */ #include #include #include #include #include #define TYPE uint64_t void test(size_t sz, TYPE *x, TYPE *y); void test(size_t sz, TYPE *x, TYPE *y) { int m = 10000; /* Repeat count. */ int j; double start = user_cpu_time_usec(); for (j = 0; j < m; j++) { bcopy((void*)x, (void*)y, sz); } double toto = user_cpu_time_usec() - start; double ctop = ((double)m)*((double)sz); /* Total number of bytes copied. */ double tcpb = toto/ctop; /* Time per byte (us) */ double vmem = 1.0/tcpb; /* Bytes per second. */ fprintf(stderr, "toto = %16.12f sec\n", 1e6*toto); fprintf(stderr, "tcpb = %16.3f usec/byte\n", tcpb); fprintf(stderr, "vmem = %16.1f Mbytes/sec\n", vmem); } int main(int argc, char **argv) { size_t sz = 1024*1024; TYPE *x = malloc(sz); TYPE *y = malloc(sz); printf("start\n"); test(sz, x, y); printf("stop\n"); return 0; }