Сравнение быстродействия.

Тема в разделе "WASM.BEGINNERS", создана пользователем ChaosDev, 19 ноя 2010.

  1. ChaosDev

    ChaosDev New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2010
    Сообщения:
    6
    Здравствуйте. Я первый раз на этом форуме. Я программист среднего уровня на C#, знаю С++(изучал 1 год) и чуть чуть ассемблер..
    Итак, проснулся я сегодня и решил поставить перед собой задачу.
    Сравнить быстродействие 3 кусков кода в консольном С++ приложении
    Соответсвенно эти 3 куска кода выполняют некоторую одинаковую математическую операцию.
    Первый метод это - код на С++ для тестирования быстродействия компилятора(visual studio 2010)
    Второй метод - реализация этого кода вручную на ассемблере
    Третий метод - тоже самое что и второй метод но с использованием MMX или SSE инструкций (у меня старенький core2 duo E4300 соответсвенно он поддерживает MMX, SSE(1, 2, 3, 3S) и EM64T.)

    Вот проблема я чего-то немогу придумать математическую задачу которую я могу реализовать вручную на ассемблере(т.к у меня плохие знания этого языка) и получить разницу во времени с помощью clock()
    Приблизительно, я хочу чтобы функция выполнялась секунд 5.
    Код выглядит так

    Код (Text):
    1. #include <stdio.h>
    2. #include <tchar.h>
    3. #include <conio.h>
    4. #include <math.h>
    5. #include <time.h>
    6. #include <xmmintrin.h>
    7.  
    8.  
    9. //метод с реализацией кода компилятором
    10. void CalcCPU()
    11. {
    12.     for(int i = 0; i < 10000; i++)
    13.     {
    14.          
    15.     }
    16. }
    17.  
    18. //метод с обычными ассемблерными инструкциями
    19. void CalcCPUASM()
    20. {
    21.     for(int i = 0; i < 10000; i++)
    22.     {
    23.         _asm
    24.         {
    25.            
    26.         }
    27.     }
    28. }
    29.  
    30.  
    31. //метод с MMX/SSE инструкциями
    32. void CalcCPUASMEx()
    33. {
    34.     for(int i = 0; i < 10000; i++)
    35.     {
    36.         _asm
    37.         {
    38.              
    39.         }
    40.     }
    41. }
    42.  
    43. int _tmain(int argc, _TCHAR* argv[])
    44. {
    45.     clock_t start,finish;
    46.     double duration;
    47.  
    48.     start = clock();
    49.     CalcCPU();
    50.     finish = clock();
    51.     duration = (double)(finish - start) / CLOCKS_PER_SEC;
    52.     printf( "CalcCPU = %2.5f seconds\n", duration );
    53.  
    54.     start = clock();
    55.     CalcCPUASM();
    56.     finish = clock();
    57.     duration = (double)(finish - start) / CLOCKS_PER_SEC;
    58.     printf( "CalcCPUASM = %2.5f seconds\n", duration );
    59.  
    60.     start = clock();
    61.     CalcCPUASMEx();
    62.     finish = clock();
    63.     duration = (double)(finish - start) / CLOCKS_PER_SEC;
    64.     printf( "CalcCPUASMEx = %2.5f seconds\n", duration );
    65.  
    66.     _getch();
    67.     return 0;
    68. }
    Если это не касается WASM то извините. Мне сказали на programmersforum.ru , что это лучшее место для задания таких вопросов..
     
  2. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    ChaosDev
    Посчитайте хэш многогигабайтного файла.
     
  3. ChaosDev

    ChaosDev New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2010
    Сообщения:
    6
    И как это сделать ?
     
  4. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    http://ru.wikipedia.org/wiki/MD5
    Вот например
     
  5. ChaosDev

    ChaosDev New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2010
    Сообщения:
    6
    Ну там не написано как на ассемблере ее реализовать..
     
  6. Tronix

    Tronix Member

    Публикаций:
    0
    Регистрация:
    10 сен 2010
    Сообщения:
    122
    ня? ^_____^ http://www.manhunter.ru/assembler/42_raschet_hesha_md5_na_assemblere.html
     
  7. ChaosDev

    ChaosDev New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2010
    Сообщения:
    6
    Чегото очень сложно.. нет ничего попроще ?
     
  8. sysexit

    sysexit New Member

    Публикаций:
    0
    Регистрация:
    27 авг 2010
    Сообщения:
    176
    crc32? Кодес дать?
     
  9. ChaosDev

    ChaosDev New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2010
    Сообщения:
    6
    Ну как хотите. Заморила меня эта проблема. Вернусь к своему любимому XNA ...
     
  10. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    ChaosDev,

    Без использования PMC и тщательного анализа результатов тесты бесполезны.
     
  11. ChaosDev

    ChaosDev New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2010
    Сообщения:
    6
    baldr
    Вот как... А что такое PMC ? (непинайте в гугле и вики нету)
     
  12. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    ChaosDev
    Performance Monitoring Counters
     
  13. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    ChaosDev Разыщи похожие темы в алгоритмах