-
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