Autor Wątek: fps w czasie rzeczywistym  (Przeczytany 14055 razy)

Offline Esidar

  • Użytkownik

# Styczeń 10, 2007, 19:14:55
Ale QueryPerformanceCounter ma taki narzut

Taki czyli jaki ? Taki jakiś ? :) A sprawdzałeś jaki ?
Instrukcja RDTSC to instrukcja chroniona i powoduje wyjątek przechwytywany przez system. Jaki jest narzut RDTSC ? Sprawdzałeś ? :)
Na moim kompie (wcale nie byle jakim) dwie instrukcje RDTSC wykonane jedna za drugą, zwracają różnicę 25 tyś cykli. QPC nie chciało mi się sprawdzać.


Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Charibo

  • Redaktor

# Styczeń 10, 2007, 19:53:46
sorry za blad w nicku, st3tc :) Dzieki za odpowiedz: bylem pewny ze rdtsc jest optymalnym rozwiazaniem - musze je szybko wywalic z mojego frameworka

EDIT: Esidar: wnioskuje to z GPG2 gdzie jest to napisane. Nie sprawdzalem narzutu tej funkcji. Moze sie myle co do tego rowniez :)
« Ostatnia zmiana: Styczeń 10, 2007, 19:57:30 wysłana przez Charibo »

Offline Xion

  • Redaktor
    • xion.log

# Styczeń 10, 2007, 20:02:44
st3tc: GetTickCount() można spokojnie używać do liczenia FPSów, bo w końcu przy rozdzielczości 1ms fałszowanie pojawi się przy...

*odpala Kalkulator Windows*

...1000 klatek na sekundę :) Oczywiście dla profilowania fragmentów kodu trzeba używać QPC, a to implikuje napisanie jakiejś własnej klasy timera. A gdy się już ją napiszę, to nic nie stoi na przeszkodzie, by używać jej także do FPS ;D

st3tc

  • Gość
# Styczeń 10, 2007, 20:21:44
Jasne ... pamietam jak odpalilem swoje stare demko bf1 na mocniejszym sprzecie - powalilo sie totalnie bo fps byl "ladnych pare setek" i postac raz biegla szybko jak blyskawica, raz wolniej

Zreszta:
2msec - 500 fps
3msec - 333 fps
4msec - 250 fps
5msec - 200 fps
6msec - 166 fps
7msec - 143 fps

A co z posrednimi wartosciami ?. Przeciez od tego zaleza inne podsystemy gry. Nie zapewnisz prawidlowego dopasowania czasu. Naturalnie wszyscy mamy fps-y > 300 :D

Offline Steel_Eagle

  • Użytkownik

# Styczeń 10, 2007, 22:12:09
Jak ja lubie klucic sie bez sensu  :)

@Eisdar: a jak wyswietliles te wartosci? Bo jezeli w konsoli to widzisz printf tez ma spoooory narzut i ja dlatego bym w ogole go nie uzywal ;) Bo jakos mi sie nie wydaje zeby RDTSC zjadalo az tyle procesora... W koncu to sa sprzetowe rozwiazania i wystarczy skopiowac wartosc do rejestru wiec duzo roboty tam nie ma.  :)

Ehhh a do profilowania mozna uzywac profesjonalnych narzedzi. Podsczas wypadu za miedze na stary gamedev znalazlem:
http://www.google.pl/search?hl=pl&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=amd+codeanalyst&spell=1
Dziala tez na prockach Intela, ale nie zdazylem jeszcze odpalic i zobaczyc w akcji ;)

Offline Esidar

  • Użytkownik

# Styczeń 10, 2007, 22:38:12
@Eisdar: a jak wyswietliles te wartosci? Bo jezeli w konsoli to widzisz printf tez ma spoooory narzut i ja dlatego bym w ogole go nie uzywal ;) Bo jakos mi sie nie wydaje zeby RDTSC zjadalo az tyle procesora... W koncu to sa sprzetowe rozwiazania i wystarczy skopiowac wartosc do rejestru wiec duzo roboty tam nie ma.  :)

Ale jak nadmieniłem, instrukcja ta wywołuje wyjątek ochrony i te 20k cykli zjada system. A sprawdziłem mniej wiecej tak:

rdtsc
mov r1,[eax]
mov r2,[edx]
rdtsc
mov r3,[eax]
mov r4,[edx]

Potem na wszelki wypadek poszło to w pętli pare razy i wyciągnąłem najniższą różnicę.


Offline Steel_Eagle

  • Użytkownik

# Styczeń 10, 2007, 22:45:03
No to luz. Widac trzeba bedzie wziac sie za robienie tych cholernych procesorow, plyt glownych i windowsow  :P Dorzucic jeden rejstr na plycie dodac do tego maly sumator +1 z wejsciem na zegar procesora... Proste kopiowanie do rejestrow procesora bez zadnych ograniczen :) ehhh... Widac i tutaj chcesz cos zrobic dobrze zrob se sam  ;D
« Ostatnia zmiana: Styczeń 10, 2007, 22:54:13 wysłana przez Steel_Eagle »

st3tc

  • Gość
# Styczeń 10, 2007, 23:55:54
Ale jak nadmieniłem, instrukcja ta wywołuje wyjątek ochrony i te 20k cykli zjada system. A sprawdziłem mniej wiecej tak:

rdtsc
mov r1,[eax]
mov r2,[edx]
rdtsc
mov r3,[eax]
mov r4,[edx]


To moze czas zaczac nauke od asm ?  :). Od kiedy istnieje mov m32, m32 ?  ;) To sie nawet nie skompiluje.

rdtsc
mov r1,eax
mov r2,edx
rdtsc
mov r3,eax
mov r4,edx

Dziala bardzo ladnie.

Cytuj
Instrukcja RDTSC to instrukcja chroniona i powoduje wyjątek przechwytywany przez system.

Nie bede cytowal dwa razy ;) :   http://forum.warsztat.gd/index.php/topic,1668.msg34382.html#msg34382

 U mnie jak profilowalem fragmenciki SSE narzut odczyt-odczyt byl jakies 25-40 cykli (nie pamietam) - i byl staly - pozniej wystarczylo te wartosc odjac i byl pomiar co do cykla procesora (i do tego sluzy RDTSC - do pomiaru ilosci *cykli* a nie czasu. Cykle beda takie same - nie wazne czy laptopowy procek sie "odtaktuje")
« Ostatnia zmiana: Styczeń 11, 2007, 00:01:02 wysłana przez st3tc »