1. Си / Говнокод #26744

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    void benchmark(int dstalign, int srcalign, size_t size, int times)
    {
    	char *DATA1 = (char*)malloc(size + 64);
    	char *DATA2 = (char*)malloc(size + 64);
    	size_t LINEAR1 = ((size_t)DATA1);
    	size_t LINEAR2 = ((size_t)DATA2);
    	char *ALIGN1 = (char*)(((64 - (LINEAR1 & 63)) & 63) + LINEAR1);
    	char *ALIGN2 = (char*)(((64 - (LINEAR2 & 63)) & 63) + LINEAR2);
    	char *dst = (dstalign)? ALIGN1 : (ALIGN1 + 1);
    	char *src = (srcalign)? ALIGN2 : (ALIGN2 + 3);
    	unsigned int t1, t2;
    	int k;
    	
    	sleepms(100);
    	t1 = gettime();
    	for (k = times; k > 0; k--) {
    		memcpy(dst, src, size);
    	}
    	t1 = gettime() - t1;
    	sleepms(100);
    	t2 = gettime();
    	for (k = times; k > 0; k--) {
    		memcpy_fast(dst, src, size);
    	}
    	t2 = gettime() - t2;
    
    	free(DATA1);
    	free(DATA2);
    
    	printf("result(dst %s, src %s): memcpy_fast=%dms memcpy=%d ms\n",  
    		dstalign? "aligned" : "unalign", 
    		srcalign? "aligned" : "unalign", (int)t2, (int)t1);
    }

    Теперь ты можешь копировать свои зёрна на 50% быстрее!

    Запостил: Ksyrx, 08 Июня 2020

    Комментарии (8) RSS

    • Надо б по хорошему вообще всю ту хуйню с malloc() проверять, что там не NULL.
      Ответить
    • А еще вот переменная int k; - она как счетчик циклов используется, лучше шоб там было size_t
      Ответить
    • А где сам memcpy_fast то?
      Ответить
    • Кому-то подарили книжку Мышхъа про потимизацию дсотупа к памяти?
      Ответить
    • > использует одни и те же адреса, гарантируя работу с кэшем процессора, а не с памятью

      какой бенчмарк )))
      Ответить
      • А ты буфер больше кеша возьми и всё будет честно.
        Ответить
        • ой, ну давайте еще пообсуждаем размер TLB, наличие THP и присутствие NUMA-нод / directory-based реализации когерентности
          Ответить

    Добавить комментарий