eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingSkąd dokładny zegar w C pod Win XP/7 ?
Ilość wypowiedzi w tym wątku: 14

  • 1. Data: 2011-05-08 21:22:07
    Temat: Skąd dokładny zegar w C pod Win XP/7 ?
    Od: "KrisB" <...@...pl>

    Potrzebuję zrobić porównanie czasu wykonania algorytmów pod Visual C++ i Win XP/7.

    Funkcja C time( time_t) z rozdzielczością do milisekund mi nie wystarcza-potrzebuję
    rozdzielczości gdzieś do mikrosekund.

    Krzyś


  • 2. Data: 2011-05-08 22:33:43
    Temat: Re: Skąd dokładny zegar w C pod Win XP/7 ?
    Od: Zbigniew Malec <a...@i...invalid>

    On Sun, 8 May 2011 23:22:07 +0200, KrisB wrote:

    > Funkcja C time( time_t) z rozdzielczością do milisekund mi nie wystarcza-potrzebuję
    rozdzielczości gdzieś do mikrosekund.

    Jeżeli potrzebujesz takiej dokładności, to znaczy, że masz złą metodykę
    pomiaru*. Pomiar powinien opierać się na setkach/tysiącach prób i
    uśrednionym czasie wykonania. Wtedy rozdzielczość do mikrosekund nie jest
    potrzebna.

    *prawdopodobnie

    --
    Pozdrawiam
    Zbyszek Malec


  • 3. Data: 2011-05-09 04:33:46
    Temat: Re: Skąd dokładny zegar w C pod Win XP/7 ?
    Od: " " <f...@g...pl>

    Zbigniew Malec <a...@i...invalid> napisał(a):
    > On Sun, 8 May 2011 23:22:07 +0200, KrisB wrote:
    > > Funkcja C time( time_t) z rozdzielczością do milisekund mi nie wystarcza-potr
    > zebuję rozdzielczości gdzieś do mikrosekund.
    >
    > Jeżeli potrzebujesz takiej dokładności, to znaczy, że masz złą metodykę
    > pomiaru*. Pomiar powinien opierać się na setkach/tysiącach prób i
    > uśrednionym czasie wykonania. Wtedy rozdzielczość do mikrosekund nie jest
    > potrzebna.
    >
    > *prawdopodobnie
    >

    alez wyjatkowo niemadra wypowiedz;

    co do pytania - QueryPerformanceCounter

    sa przyklady w necie ( trzeba odwalic pare
    smieciowych ale powinien sie znalezc dobry)

    najpierw raz trzeba odpytac kompa o rozdzielczosc
    tego zegara (na moim jest o ile pamietam ok 270 nano)
    po czym pytasz o czasy i jest ok (wez poprawke
    na puste wykonanie u mnie o ile pamietam ok 1 mikro)

    sam uzywam tego 'pasjami'


    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/


  • 4. Data: 2011-05-09 07:43:43
    Temat: Re: Skąd dokładny zegar w C pod Win XP/7 ?
    Od: "KrisB" <...@...pl>

    Użytkownik "Zbigniew Malec" <a...@i...invalid> napisał w wiadomości
    news:131qyujfagg1$.1vjfkt1ng7lwq$.dlg@40tude.net...

    > On Sun, 8 May 2011 23:22:07 +0200, KrisB wrote:
    >
    >> Funkcja C time( time_t) z rozdzielczością do milisekund mi nie
    wystarcza-potrzebuję rozdzielczości gdzieś do mikrosekund.
    >
    > Jeżeli potrzebujesz takiej dokładności, to znaczy, że masz złą metodykę
    > pomiaru*. Pomiar powinien opierać się na setkach/tysiącach prób i
    > uśrednionym czasie wykonania. Wtedy rozdzielczość do mikrosekund nie jest
    > potrzebna.
    >
    > *prawdopodobnie

    1) Mam algorytm który będzie wykonywany dla danych rozmiaru max ~naście. Wykona się
    to w czasie max kilku msek.
    2) Co do tych tysięcy prób: a jak "odfiltrować" koszty samej obsługi tych tysięcy
    prób ? Wywołanie / obsługa pętli / niemiarodajna
    zawartość cache tj. na ogół większość danych przy powtarzających się wywołaniach już
    będzie w cache ?

    PS. Jak pod Win XP/7 uczynić taki pomiar obiektywny ? Jak i jakie usługi wyłączyć ?
    Mogę wyłączyć firewall, antywirusa, wszystkie
    możliwe procesy w msconfig, odłączę kom od sieci, ale to raczej mało. Jak zrobić żeby
    win na czas pomiarów nie robił NIC dodatkowego
    a przynajmniej jak najmniej ??? (Na pewno rozumiecie)


  • 5. Data: 2011-05-09 10:24:19
    Temat: Re: Skąd dokładny zegar w C pod Win XP/7 ?
    Od: Paweł Kierski <n...@p...net>

    W dniu 2011-05-09 09:43, KrisB pisze:
    > Użytkownik "Zbigniew Malec" <a...@i...invalid> napisał w wiadomości
    > news:131qyujfagg1$.1vjfkt1ng7lwq$.dlg@40tude.net...
    >
    >> On Sun, 8 May 2011 23:22:07 +0200, KrisB wrote:
    >>
    >>> Funkcja C time( time_t) z rozdzielczością do milisekund mi nie
    >>> wystarcza-potrzebuję rozdzielczości gdzieś do mikrosekund.
    >>
    >> Jeżeli potrzebujesz takiej dokładności, to znaczy, że masz złą metodykę
    >> pomiaru*. Pomiar powinien opierać się na setkach/tysiącach prób i
    >> uśrednionym czasie wykonania. Wtedy rozdzielczość do mikrosekund nie jest
    >> potrzebna.
    >>
    >> *prawdopodobnie
    >
    > 1) Mam algorytm który będzie wykonywany dla danych rozmiaru max ~naście.
    > Wykona się to w czasie max kilku msek.
    > 2) Co do tych tysięcy prób: a jak "odfiltrować" koszty samej obsługi
    > tych tysięcy prób ? Wywołanie / obsługa pętli / niemiarodajna zawartość
    > cache tj. na ogół większość danych przy powtarzających się wywołaniach
    > już będzie w cache ?

    Pomiar można zrobić timerem o rozdzielczości (dużo) mniejszej niż czas
    mierzony, trzeba tylko odpowiednio dużo powtórzeń i nie mieć bardzo
    dużego pecha 8-)

    Zakładam, że z początkiem pomiaru trafiamy losowo względem ticku
    timera. Wtedy szansa, że wartość timera się zmieni podczas naszego
    pomiaru jest taka, jak stosunek czasu operacji do okresu zegara. Czyli
    wystarczy:

    totalTime = 0;
    for(1..N)
    start = time(0);
    operation();
    end = time(0);
    totalTime += end - start;
    averageTime = totalTime / N;

    Duży pech jest wtedy, gdy jakaś wielokrotność (K) czasu jednego obiegu
    pętli jest bardzo bliska okresowi zegara. W przypadku dokładnej
    równości dostajesz zawsze wynik równy 0 lub N/K cykli.

    Dla pewności warto pętlę powtarzać nie określoną liczbę razy, ale do
    czasu, aż uzbieramy pewne minimum zakumulowanego czasu.

    Cache chyba da się "opróżnić" między wywołaniami (ktoś bardziej fachowy
    się pewnie wypowie). Tyle, że to znacznie wydłuży czas pomiaru.

    --
    Paweł Kierski
    n...@p...net


  • 6. Data: 2011-05-09 19:18:06
    Temat: Re: Skąd dokładny zegar w C pod Win XP/7 ?
    Od: Zbigniew Malec <a...@i...invalid>

    On Mon, 9 May 2011 09:43:43 +0200, KrisB wrote:

    > 1) Mam algorytm który będzie wykonywany dla danych rozmiaru max ~naście. Wykona się
    to w czasie max kilku msek.

    A to w takim razie do czego ci jest ta wiedza o sprawności algorytmu
    potrzebna? Jeżeli to zawsze będą małe dane, to niezależnie od algorytmu*
    czas wykonania będzie krótki. Ulepszanie algorytmów ma sens jedynie* w
    przypadku, kiedy spodziewamy się dużej ilości danych, albo sama czynność
    jest wykonywana bardzo często.
    Jeżeli nie masz dobrych podstaw (problemu z wydajnością), to lepiej się za
    takie optymalizacje nie brać i zobaczyć jak to się będzie faktycznie
    zachowywało w realnej sytuacji i dopiero jak mamy pewność, że poprawa
    algorytmu ma sens to się do niej bierzemy. Tutaj przydaje się profiler.

    * w granicach rozsądku i z pominięciem sytuacji ekstremalnych oraz
    bibliotek (program ma być tak szybki, jak tego oczekuje jego użytkownik,
    ale biblioteka musi być tak szybka, jak oczekuje tego jej najbardziej
    niecierpliwy użytkownik ;) ).

    > 2) Co do tych tysięcy prób: a jak "odfiltrować" koszty samej obsługi tych tysięcy
    prób ? Wywołanie / obsługa pętli / niemiarodajna
    > zawartość cache tj. na ogół większość danych przy powtarzających się wywołaniach
    już będzie w cache ?

    To jest oczywiście dobre i ważne pytanie. Znowu zależy jaka dokładność
    ciebie interesuje i co tak na prawdę chcesz mierzyć.

    Narzut na pętlę nie będzie duży, natomiast ma tę zaletę, że koszt jego
    (narzutu) jest przewidywalny. Jeżeli chcesz porównać dwa algorytmy, to taki
    dodatkowy koszt prawdopodobnie nie będzie przeszkodą w interpretacji
    wyników.
    Jeżeli martwi ciebie zawartość cache, to znowu trzeba siebie zapytać, co
    się tak na prawdę mierzy. Jeżeli chodzi o samą wydajność algorytmu, to czas
    dostępu do pamięci nie powinien mieć znaczenia, bo nie wynika on z samej
    konstrukcji algorytmu.
    Jeżeli ten cache ci jednak przeszkadza, to oczywiście też da się to
    rozwiązać, znowu zależy to od konkretnego zagadnienia.
    Możesz posługiwać się np. danymi większymi niż cache i w ten sposób
    zapewnić sobie, że cache właściwie nie będzie używany, możesz też np.
    losować dane a potem odjąć od ogólnego wyniku czas wykonania takiej samej
    ilości samych losowań (wtedy powinieneś dostać dość dobre przybliżenie
    samego algorytmu).
    W takich przypadkach oczywiście zawsze trzeba też uważać, żeby nam
    kompilator nie wyoptymalizował z kodu kawałków, które chcemy mierzyć ;)

    > PS. Jak pod Win XP/7 uczynić taki pomiar obiektywny ? Jak i jakie usługi wyłączyć ?
    Mogę wyłączyć firewall, antywirusa, wszystkie
    > możliwe procesy w msconfig, odłączę kom od sieci, ale to raczej mało. Jak zrobić
    żeby win na czas pomiarów nie robił NIC dodatkowego
    > a przynajmniej jak najmniej ??? (Na pewno rozumiecie)

    Raczej się nie da, natomiast wykonując odpowiednio dużą ilość powtórzeń
    wyeliminujesz w znacznej mierze znaczną ilość takich problemów.

    Ps. tak jak napisał Paweł, zamiast ustalać ilość powtórzeń, lepiej ustalić
    całkowity czas testu.

    --
    Pozdrawiam
    Zbyszek Malec


  • 7. Data: 2011-05-10 06:57:12
    Temat: Re: Skąd dokładny zegar w C pod Win XP/7 ?
    Od: Bronek Kozicki <b...@s...net>

    On 08/05/2011 22:22, KrisB wrote:
    > Potrzebuję zrobić porównanie czasu wykonania algorytmów pod Visual C++ i
    > Win XP/7.
    >
    > Funkcja C time( time_t) z rozdzielczością do milisekund mi nie
    > wystarcza-potrzebuję rozdzielczości gdzieś do mikrosekund.

    widziałeś to? http://www.lochan.org/2005/keith-cl/useful/win32time
    .html


    B.


  • 8. Data: 2011-05-10 07:08:25
    Temat: Re: Skąd dokładny zegar w C pod Win XP/7 ?
    Od: Bronek Kozicki <b...@s...net>

    On 08/05/2011 22:22, KrisB wrote:
    > Potrzebuję zrobić porównanie czasu wykonania algorytmów pod Visual C++ i
    > Win XP/7.

    hm jeszcze jest coś takiego, ale nie wiem jak to działa
    http://msdn.microsoft.com/en-us/library/ff537503.asp
    x


    B.


  • 9. Data: 2011-05-10 11:38:25
    Temat: Re: Skąd dokładny zegar w C pod Win XP/7 ?
    Od: Mariusz Marszałkowski <m...@g...com>

    On 9 Maj, 00:33, Zbigniew Malec <a...@i...invalid> wrote:
    > On Sun, 8 May 2011 23:22:07 +0200, KrisB wrote:
    > > Funkcja C time( time_t) z rozdzielczością do milisekund mi nie
    wystarcza-potrzebuję rozdzielczości gdzieś do mikrosekund.
    >
    > Jeżeli potrzebujesz takiej dokładności, to znaczy, że masz złą metodykę
    > pomiaru*. Pomiar powinien opierać się na setkach/tysiącach prób i
    > uśrednionym czasie wykonania. Wtedy rozdzielczość do mikrosekund nie jest
    > potrzebna.
    Dlaczego usrednionym? Ja robie tysiace pomiarow i wybieram najktorszy.
    Pozdrawiam


  • 10. Data: 2011-05-10 11:48:05
    Temat: Re: Skąd dokładny zegar w C pod Win XP/7 ?
    Od: Paweł Kierski <n...@p...net>

    W dniu 2011-05-10 13:38, Mariusz Marszałkowski pisze:
    > On 9 Maj, 00:33, Zbigniew Malec<a...@i...invalid> wrote:
    >> On Sun, 8 May 2011 23:22:07 +0200, KrisB wrote:
    >>> Funkcja C time( time_t) z rozdzielczością do milisekund mi nie
    wystarcza-potrzebuję rozdzielczości gdzieś do mikrosekund.
    >>
    >> Jeżeli potrzebujesz takiej dokładności, to znaczy, że masz złą metodykę
    >> pomiaru*. Pomiar powinien opierać się na setkach/tysiącach prób i
    >> uśrednionym czasie wykonania. Wtedy rozdzielczość do mikrosekund nie jest
    >> potrzebna.
    > Dlaczego usrednionym? Ja robie tysiace pomiarow i wybieram najktorszy.

    Najkrótszy czas serii pewnie miałeś na myśli. A Zbyszek pewnie
    uśrednienie czasu z serii.

    --
    Paweł Kierski
    n...@p...net

strony : [ 1 ] . 2


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: