Advertisement
Guest User

Untitled

a guest
Apr 25th, 2012
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.00 KB | None | 0 0
  1. #include <stdint.h>
  2. #include <sys/time.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. char *A;
  7. char *B;
  8. char *C;
  9.  
  10. void memcpy1(char *dest, const char *src, size_t count) {
  11.     unsigned int i;
  12.     uint64_t *dest1 = (uint64_t*)dest, *src1 = (uint64_t*)src;
  13.     for (i = 0; i < count/sizeof(uint64_t); i++)
  14.         *dest1++ = *src1++;
  15. }
  16.  
  17.  
  18. void memcpy2(char *dest, const char *src, size_t count) {
  19.     asm volatile("cld\nrep ; movsq"
  20.             :
  21.             : "S" (src), "D" (dest), "c" (count/8)
  22.             : "memory");
  23. }
  24.  
  25. int main() {
  26.     int i;
  27.     const int j = 5;
  28.     int n = 512 * 1024 * 1024;
  29.     struct timeval a, b, c;
  30.  
  31.     A = malloc(n);
  32.     B = malloc(n);
  33.  
  34.     gettimeofday(&a, NULL);
  35.     for (i = 0; i < j; i++)
  36.         memcpy1(B, A, n);
  37.     gettimeofday(&b, NULL);
  38.     for (i = 0; i < j; i++)
  39.         memcpy2(B, A, n);
  40.     gettimeofday(&c, NULL);
  41.  
  42.     int t1 = (b.tv_sec - a.tv_sec) * 1000 + (b.tv_usec - a.tv_usec) / 1000;
  43.     int t2 = (c.tv_sec - b.tv_sec) * 1000 + (c.tv_usec - b.tv_usec) / 1000;
  44.  
  45.     printf("#1: %d ms\n", t1 / j);
  46.     printf("#2: %d ms\n", t2 / j);
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement