Время выполнения алгоритма. как засечь?

Тема в разделе "WASM.BEGINNERS", создана пользователем 01478520, 12 сен 2007.

  1. 01478520

    01478520 New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2007
    Сообщения:
    39
    Вот интересует скорость алгоритма. как посчитать, например, колл-во инструкций в сек?
     
  2. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.742
    Секундомер :)

    Vtune или другой профилировщик ...
     
  3. 01478520

    01478520 New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2007
    Сообщения:
    39
    asmlamo
    хе-хе... военная тайна? или не знаем?
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    01478520

    тебе же написали - профайлер
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Если руками - поиск по форуму тестилку от bogrus'a
     
  6. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Я, наверное, как всегда, чего-то не понимаю... чем GetTickCount не угодил?
     
  7. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
  8. 01478520

    01478520 New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2007
    Сообщения:
    39
    мдя.. спасибо l_inc и nester (за раз, два). Имею в виду асмовые иструкции, которые считают эти тики. RDTSC или чёто там
     
  9. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    можешь в код добавить rdtsc в результате в регистрах eax edx получишь число тактов. затем просто найдёшь разность в 2-х точках программы.
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    GetTickCount, GetSystemTime
    KeQueryTickCount, KeQueryTimeIncrement
    дальше перечислять надоело
     
  11. 01478520

    01478520 New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2007
    Сообщения:
    39
    почему в двух одновременно?
     
  12. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    01478520
    Потому что возвращаемое значение счетчика 64 бита :)
     
  13. 01478520

    01478520 New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2007
    Сообщения:
    39
    EDX:EAX 64 это EDX и EAX ?

    ну и как из них внять само число тактов ? и где об этом достовернее пишется?
     
  14. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Код (Text):
    1.     mov ebx,5
    2. a0: push ebx
    3.     xor     eax,eax
    4.     cpuid
    5.     rdtsc
    6.     mov Tics,eax
    7.     xor eax,eax
    8.     cpuid
    9.     rdtsc
    10.     sub eax,Tics
    11.     mov overhead,eax
    12.     pop ebx
    13.     dec ebx
    14.     jnz a0
    15. ;---------------------------------------
    16.              mov ecx,4
    17. a1: push ecx
    18.              xor eax,eax
    19.     cpuid
    20.     rdtsc
    21.         mov TimerLo,eax
    22.         mov TimerHi,edx
    23.     . . .; программа, по которой делают замер
    24.              xor eax,eax
    25.     cpuid
    26.     rdtsc
    27.         sub eax,TimerLo
    28.         sbb edx,TimerHi
    29.         sub eax,overhead
    30.         sbb edx,0
    31.         mov TimerLo,eax
    32.         mov TimerHi,edx
    33.     pop ecx
    34.     dec ecx
    35.     jnz a1
    в TimerHi и TimerLo количество тиков
    для получения стабильных результатов все измерения делают в цикле минимум из 3-4 проходов и берут последний результат, кроме того учитывают время на выполнение самого rdts
     
  15. 01478520

    01478520 New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2007
    Сообщения:
    39
    Mikl__
    спасиба. теперь бы в сек перевести :)
     
  16. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    01478520
    Частота CPU на тики...
     
  17. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    Код (Text):
    1.    
    2. .686
    3. .MMX
    4. .XMM
    5. .MODEL FLAT,STDCALL
    6. option casemap:none
    7.  
    8.     include windows.inc
    9.     include user32.inc
    10.     include kernel32.inc
    11.     include masm32.inc
    12.     include urlmon.inc
    13.     include shell32.inc
    14.    
    15.     include C:\masm32\macros\Strings.mac
    16.    
    17.     includelib user32.lib
    18.     includelib kernel32.lib
    19.     includelib masm32.lib
    20.     includelib urlmon.lib
    21.     includelib shell32.lib
    22.    
    23. .data?
    24.     _start qword ?
    25.     finish qword ?
    26.     freq qword ?
    27.     f real8 ?
    28.     buffer db 20 dup (?)
    29. .data
    30.     a qword 3C4374651717C6EBh
    31. .code
    32. start:
    33.     invoke QueryPerformanceFrequency, offset freq
    34.     invoke QueryPerformanceCounter, offset _start
    35.     mov ecx,7FFFFFFFh
    36.     @@:
    37.         movq mm0,a
    38.         movd mm1,ecx
    39.         paddw mm0,mm1
    40.         psllq mm0,1
    41.         dec ecx
    42.     jne @b
    43.     invoke QueryPerformanceCounter, offset finish
    44.     finit
    45.     fild _start
    46.     fild finish
    47.     fsub st(0),st(1)
    48.     fild freq
    49.     fdiv
    50.     fst f
    51.     invoke FloatToStr2, f, offset buffer
    52.     invoke MessageBox, 0, offset buffer, 0, MB_OK+MB_ICONINFORMATION
    53.     invoke ExitProcess, 0
    54. end start
    55. end start
     
  18. 01478520

    01478520 New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2007
    Сообщения:
    39
    W4FhLF
    что за инструкции?(или это макросы?)
    Код (Text):
    1.  
    2. movq mm0,a
    3.         movd mm1,ecx
    4.         paddw mm0,mm1
    5.         psllq mm0,1
    6. ну это FPU вроде (?)
    7.     finit
    8.     fild _start
    9.     fild finish
    10.     fsub st(0),st(1)
    11.     fild freq
    12.     fdiv
    13.     fst f
    Где бы взять описание всех новых инструкций?
    а то вот описание movzx в моём талмуде нету
     
  19. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Новых? Ха! Это mmx и fpu
     
  20. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    movzx dest, src
    copies the value of the source operand to the destination register with the zerods extended