Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdint.h>
- #include <sys/time.h>
- #include <stdio.h>
- #include <stdlib.h>
- char *A;
- char *B;
- char *C;
- void memcpy1(char *dest, const char *src, size_t count) {
- unsigned int i;
- uint64_t *dest1 = (uint64_t*)dest, *src1 = (uint64_t*)src;
- for (i = 0; i < count/sizeof(uint64_t); i++)
- *dest1++ = *src1++;
- }
- void memcpy2(char *dest, const char *src, size_t count) {
- asm volatile("cld\nrep ; movsq"
- :
- : "S" (src), "D" (dest), "c" (count/8)
- : "memory");
- }
- int main() {
- int i;
- const int j = 5;
- int n = 512 * 1024 * 1024;
- struct timeval a, b, c;
- A = malloc(n);
- B = malloc(n);
- gettimeofday(&a, NULL);
- for (i = 0; i < j; i++)
- memcpy1(B, A, n);
- gettimeofday(&b, NULL);
- for (i = 0; i < j; i++)
- memcpy2(B, A, n);
- gettimeofday(&c, NULL);
- int t1 = (b.tv_sec - a.tv_sec) * 1000 + (b.tv_usec - a.tv_usec) / 1000;
- int t2 = (c.tv_sec - b.tv_sec) * 1000 + (c.tv_usec - b.tv_usec) / 1000;
- printf("#1: %d ms\n", t1 / j);
- printf("#2: %d ms\n", t2 / j);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement