Время работы программы

Тема в разделе "WASM.BEGINNERS", создана пользователем denisznu, 17 окт 2008.

  1. denisznu

    denisznu New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2008
    Сообщения:
    15
    Всем привет, вообщем такая проблема..нужно замерять время работы программы..использую я в своей программе такой метод:
    //запониниаем в начале программы
    time_t start_t,end_t;
    start_t = time(NULL);

    //в конце программы вычитаем разницу начального и конечного времени и выводим

    end_t = time(NULL);
    cout<<end_t-start_t<<"sec\n";


    Все проблема в том, что этот метод возвращает время в секундах, а мне нужно в милисекундах. Кто то знает подобный метод?
     
  2. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    вызывать gettickcount()?
     
  3. denisznu

    denisznu New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2008
    Сообщения:
    15
    Не слышал о таком..можеш рассказать по подробнее? Или привести пример.
     
  4. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Умножить на тысячу? :)
     
  5. denisznu

    denisznu New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2008
    Сообщения:
    15
    l_inc
    Умножать на тысячу нету смысла..так как выводит: 0 sec или 5 sec...
     
  6. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    В гугле первая ссылка.
     
  7. denisznu

    denisznu New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2008
    Сообщения:
    15
    Это конешно хорошо, но с англ.проблемы, кто нибудь знает еще варианты?
     
  8. oxcc

    oxcc New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2008
    Сообщения:
    51
    Код (Text):
    1. ;============================================================================
    2. .686
    3. .model flat,stdcall
    4. option casemap:none
    5. ;============================================================================
    6.  
    7.       include \masm32\include\windows.inc
    8.       include \masm32\include\user32.inc
    9.       include \masm32\include\kernel32.inc
    10.  
    11.       includelib \masm32\lib\user32.lib
    12.       includelib \masm32\lib\kernel32.lib
    13.  
    14. ;============================================================================
    15. .data     ; выровнено на 4096                         ; В А Ш И   Д А Н Н Ы Е
    16. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    17.  
    18.  
    19. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    20. iter        equ     3                             ;  кол-во проходов testing:
    21. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    22. tics        dq      0                             ;
    23. overhead    dd      0                             ;
    24. counter     dd      0                             ;
    25. resultlist  dq      iter dup(0)                   ;
    26. templist    db      iter*10+2 dup(0)              ;      "технические данные"
    27. message     db      iter*26+1 dup(0)              ;
    28. caption     db      64 dup(0)                     ;
    29. lpfmtm      db      '%.8X%.8X%.8X',13,10,0        ;
    30. lpfmtc      db      '%0.8X / %u bytes / %u passes',0
    31. ;============================================================================
    32. .code
    33. ;============================================================================
    34. start:
    35. ;           invoke  GetCurrentProcess
    36. ;           invoke  SetPriorityClass,eax,REALTIME_PRIORITY_CLASS
    37. ;           invoke  GetCurrentThread
    38. ;           invoke  SetThreadPriority,eax,THREAD_PRIORITY_TIME_CRITICAL
    39. ;============================================================================
    40.             mov     ebp,5                         ;
    41. align       16                                    ;
    42. @@:         mov     eax,0                         ;
    43.             cpuid                                 ;
    44.             rdtsc                                 ;
    45.             mov     dword ptr tics,eax            ;          подсчет overhead
    46.             mov     dword ptr tics+4,edx          ;  (используется для вычета
    47.             xor     eax,eax                       ;        тактов, ушедших на
    48.             cpuid                                 ;     "технические" детали)
    49.             xor     eax,eax                       ;
    50.             cpuid                                 ;
    51.             rdtsc                                 ;
    52.             sub     eax,dword ptr tics            ;
    53.             mov     overhead,eax                  ;
    54.             dec     ebp                           ;
    55.             jnz     @B                            ;
    56. align       16
    57. ;============================================================================
    58. testloop: ; используйте esi edi ebp                 И Н И Ц И А Л И З А Ц И Я
    59. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    60.  
    61.  
    62. ;mov ebp,1          
    63.  
    64.  
    65. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    66. align       16                          ; testloop - цикл проходов (итераций)
    67. ;============================================================================
    68.             rept 8
    69.             nop                                   ; для выравнивания testing:
    70.             endm
    71.             mov     eax,0
    72.             cpuid
    73.             rdtsc
    74.             mov     dword ptr tics,eax
    75.             mov     dword ptr tics+4,edx
    76.             xor     eax,eax
    77.             cpuid                           ; eax ecx edx ebx  не сохраняется
    78. ;============================================================================
    79. testing:  ; выровнено на 16     ; Т Е С Т И Р У Е М Ы Е   И Н С Т Р У К Ц И И
    80. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    81.  
    82. @@:       ; тело тестируемого цикла
    83.  
    84. ;============================================================================
    85.  
    86.  
    87.  
    88. Congratulation:    
    89. ;============================================================================
    90. ;           dec     ebp
    91. ;           jnz     @b
    92.  
    93. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    94.                                             ; К О Н Е Ц   И Н С Т Р У К Ц И Й
    95. ;============================================================================
    96. testsize:   xor     eax,eax                 ; eax ecx edx ebx  не сохраняется
    97.             cpuid
    98.             rdtsc
    99.             mov     ebx,dword ptr counter
    100.             mov     dword ptr resultlist[ebx],eax
    101.             mov     dword ptr resultlist[ebx+4],edx
    102.             mov     eax,dword ptr tics
    103.             mov     edx,dword ptr tics+4
    104.             add     eax,dword ptr overhead
    105.             adc     edx,0
    106.             sub     dword ptr resultlist[ebx],eax
    107.             sbb     dword ptr resultlist[ebx+4],edx
    108.             add     ebx,8
    109.             mov     dword ptr counter,ebx
    110.             cmp     ebx,iter * 8
    111.             jb      testloop
    112. ;============================================================================
    113. ;                                                           вывод результатов
    114. ;============================================================================
    115. ;           invoke  GetCurrentThread
    116. ;           invoke  SetThreadPriority,eax,THREAD_PRIORITY_NORMAL
    117. ;           invoke  GetCurrentProcess
    118. ;           invoke  SetPriorityClass,eax,NORMAL_PRIORITY_CLASS
    119. ;============================================================================
    120.             finit
    121.             mov     esi,offset resultlist
    122.             mov     ebp,offset templist
    123.             mov     edi,offset message
    124. align       4
    125. @@:         fild    qword ptr [esi]
    126.             fabs
    127.             fbstp   tbyte ptr [ebp]
    128.             invoke  wsprintf,edi,addr lpfmtm,dword ptr [ebp+8],\
    129.                     dword ptr [ebp+4],dword ptr [ebp]
    130.             add     esi,8
    131.             add     ebp,10
    132.             add     edi,eax
    133.             sub     dword ptr counter,8
    134.             jnz     @B
    135.             mov     eax,testsize
    136.             sub     eax,testing
    137.             invoke  wsprintf,addr caption,addr lpfmtc,testing,eax,iter
    138.             invoke  MessageBox,0,addr message,addr caption,MB_ICONINFORMATION
    139.             finit
    140.             invoke  ExitProcess,0
    141. end         start
    142. ;============================================================================
     
  9. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    translate.google.ru
     
  10. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    http://www.google.com/search?hl=en&q=msdn%20GetTickCount

    Даёт милисекунды, но неточен при замерах в десятки ms. поэтому либо меряй что-то что занимает секунды (цикл), либо вот:

    http://www.google.com/search?hl=en&q=QueryPerformanceCounter+msdn
     
  11. Explode Sense

    Explode Sense New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2006
    Сообщения:
    130
    Адрес:
    Russia
    Если извратиться немного с timeBeginPeriod/timeEndPeriod можно добиться относительной точности на десятки и даже единицы ms с GetTickCount, но QueryPerformanceCounter всё же будет по лучше в этом плане.