IRQ karty graficznej

Problemy dotyczące programowania.

Moderatorzy: Moderatorzy, Administratorzy

Awatar użytkownika
pralat
Użytkownik
Posty: 51
Rejestracja: 2005-12-02, 09:32
Lokalizacja: Opole

IRQ karty graficznej

Post autor: pralat »

Witam.

Mam do rozwiazania problem z synchronizacja obrazu z odswiezaniem na karcie Radeon. Dotychczas sprawdzilem 2 metody - automatyczna synchronizacje realizowana przez DRI oraz sprawdzanie jednego z rejestrow karty. Problem w tym, ze te rozwiazania pochlaniaja znaczne ilosci procesora (!), a aplikacja ma w tym czasie inne rzeczy do roboty.
W zrodlach kernala widzialem, ze karta moze wysylac przerwanie zwiazane wlasnie z odswiezaniam. Stad moje pytanie: w jaki sposob mozna podlaczyc sie do obslugi przerwan generowanych przez karte? Kwestie rozpoznania, co jest konkretnie przyczyna przerwania zostawiam na pozniej.
Dzieki za sugestie :)
Awatar użytkownika
kazalot
Użytkownik
Posty: 1259
Rejestracja: 2006-04-05, 10:48

Re: IRQ karty graficznej

Post autor: kazalot »

hmm radeona sie juz pozbylem bo sie nie sprawowal za dobrze na linuxie, ale na nvidii teraz jak odpalam sync to vblank to przy 75hz glxgears czy fgl_glxgerars(pozostalosc po radeonie::) to mam zuzycie procesora na poziomie ok 10% (sempron 2Ghz) czy ja wiem czy to tak duzo biorac pod uwage fakt ze karta pewnie nie obsluguje renderowania w 100% mysle ze jakies advanced cpu instructions tez jej pomagaja.mysle ze na radeonie te wartosci nie powinny byc znacznie wieksze zobacz np w sterownikach binarnych,nie wiem czy dobrze zrozumialem o co ci chodzi bo nie napisales dokladnie co chcesz osiagnac czy chcesz sie dobrac do synchronizacji bo masz w tym jakies glebsze cele czy poprostu chcesz zeby obraz byl zsynchronizowany,tak czy inaczej ja uwazam ze zuzycie procka w celu synchronizacji z odswiezaniem jest znikome pozatym ogranicza ci to liczbe fps wiec napewno wiecej zostaje na obliczenia niezwiazane z grafika;)
Awatar użytkownika
pralat
Użytkownik
Posty: 51
Rejestracja: 2005-12-02, 09:32
Lokalizacja: Opole

Re: IRQ karty graficznej

Post autor: pralat »

Niestety tak nie jest. Na sempronie 3100 obciazenie przy synchronizacji w glxgears wynosi rowne 100%. Dzieje sie tak ze wzgledu na samo dzialanie mechanizmu synchronizacji - polega ono na ciaglym sprawdzaniu wartosci rejestru na karcie, o oczekiwaniu na konkretna wartosc. Pojawia sie ona na 2-3us, wiec o zadnych sleepach w petli nie ma mowy.
Chodzi mi o sama synchronizacje, nic wiecej.
Awatar użytkownika
kazalot
Użytkownik
Posty: 1259
Rejestracja: 2006-04-05, 10:48

Re: IRQ karty graficznej

Post autor: kazalot »

hehe moze ty renderujesz na mesie;) przyznaje ze nie wierze troche w to ze taka roznica jest miedzy radeonem a nvidia pozatym zdaje mi sie ze na radeonie tez synchronizowalem i bylo ok, no nic jesli mi sie uda dzis jakiegos radeona namierzyc to wsadze bo mam chwile i sprawdze podejzewam ze masz cos zle skongfigurowane;)a jesli nie to i tak opinia o ati mi sie nie pogorszy bo gorsza byc nie moze;)

ps zanim sprawdze to mozesz sie zainteresowac i poszukac jak to jest w nvidi zrobione ze nie meczy procka
Ostatnio zmieniony 2006-06-08, 12:33 przez kazalot, łącznie zmieniany 1 raz.
Awatar użytkownika
pralat
Użytkownik
Posty: 51
Rejestracja: 2005-12-02, 09:32
Lokalizacja: Opole

Re: IRQ karty graficznej

Post autor: pralat »

Wierz mi, ze zbadalem sprawe odpowiednio dobrze. Nie pisze tego na podstawie czegos, co mi sie wydaje, albo nie wiem jak sprawdzic. Wiem w jaki sposob realizowana jest synchronizacja i jakie niesie to ze soba konsekwencje. Zle skonfigurowane - daj spokoj.... Np. co?
Awatar użytkownika
kazalot
Użytkownik
Posty: 1259
Rejestracja: 2006-04-05, 10:48

Re: IRQ karty graficznej

Post autor: kazalot »

niestety nie mam karty zeby sprawdzic:( a dlaczego procesor musi sie mieszac do synchronizacji?karta nie potrafi tego robic we wlasnym zakresie?przeciez to odniej zalezy jaka jest czestotliwosc ona tez zajmuje sie renderowaniem moje niedowierzanie wynika z tego ze sam chyba przyznasz ze 2 konkurujace ze soba marki nie moga miec az takiej roznicy wydajnosci ze na nvidi to co zajmuje procesor w kilku % na ati w 100% pozatym przeciez jezeli by tak bylo to ta karta byla by bezuzyteczna chyba ze ktos lubi miec smietnik na ekranie, tak czy inaczej zobacz jak to jest na nvidi bedziesz wiedzial jaki sposob jest bardziej optymalny
Awatar użytkownika
pralat
Użytkownik
Posty: 51
Rejestracja: 2005-12-02, 09:32
Lokalizacja: Opole

Re: IRQ karty graficznej

Post autor: pralat »

Powtarzam po raz kolejny - sterownik zanim zmieni strone (glXSwapBuffers) czeka na wystawienie bitu vblank w jednym z rejestrow karty. Dlaczego jest to zrobione w taki daremny sposob? Sam sie temu dziwie i poczatkowo nie miescilo mi sie to w glowie, ze ATI odwala taka maniane w takiej, pozornie banalnej, kwestii.
Z drugiej strony odpowiedz mi na pytanie - jak karta mialaby to robic sama? Nie mozna i tak powrocic z wywolania glXSwapBuffers, dopoki nie nastapi vblank - w przeciwnym razie karta wyswietlalaby np. 75fps, a program generowalby 150, ze czego polowa nie zostalaby pokazana. Kwestia podstawowa jest sama forma czekania - bardzo krotkie czasy jakie wchodza w gre nie pozwalaja na uzycie w petli sprawdzajacej zadnego sleepa, wiec wiadomo jakie efekty ma taka petla.
Pewnym rozwiazaniem jest wykonanie sleepa przed zmiana strony, zeby zminimalizowac kosztowne oczekiwanie w samym sterowniku. Trzeba jednak dobrze trafic z czasem, zeby nie przeczekac.
Jak bedziesz mial okazje to sprawdzic - u siebie, u kogos - zrob to, moje zapewnienia i tak sa bez sensu, bo przeciez nie pokaze Ci zadnego dowodu.
Sprawdzanie nvidii nie ma dla mnie sensu - program ma chodzic na radeonach, takie sa zalozenia i nie mam na to zadnego wplywu.

---- edit
Przeprowadzilem male testy pod windowsem przy pomocy wygaszacza Flux:
- wylaczona synchronizacja, wylaczone ograniczenie fps w wygaszaczu: 240fps, 100% CPU
- wylaczona synchronizacja, wlaczone ograniczenie fps w wygaszaczu do 60: 60fps, 20% CPU
- wlaczona synchronizacja, wyaczone ograniczenie fps w wygaszaczu: 60fps, 100% CPU

to chyba mowi samo za siebie...
Ostatnio zmieniony 2006-06-09, 19:30 przez pralat, łącznie zmieniany 1 raz.
Awatar użytkownika
kazalot
Użytkownik
Posty: 1259
Rejestracja: 2006-04-05, 10:48

Re: IRQ karty graficznej

Post autor: kazalot »

no to mozesz czas czekania dobrac empirycznie jak przeczekasz raz to chyba sie nic nie stanie liczba fpsow ci spadnie 2x poprostu, to zmniejszysz czas jezeli odswiezanie to 75hz tzn ze sygnal jest co 1/75sec czyli co ok 13ms jak bedziesz czekal 1ms to nie przeczekasz a zuzycie powinno spasc do 0
nie obrazaj sie ze nie dowierzam poprostu taka mam zasade ze lubie sprawdzic wszelkie istotne informacje osobiscie wtedy jezeli komus cos mowie moge mu powiedziec z cala pewnoscia a nie musze dodawac ze tylko slyszalem ze tak jest.jak ci powiem ze studentka z mieszkania na przeciwko otwiera dzwi topless to uwierzysz mi na slowo czy pojdziesz pozyczyc szklanke cukru;)
Awatar użytkownika
pralat
Użytkownik
Posty: 51
Rejestracja: 2005-12-02, 09:32
Lokalizacja: Opole

Re: IRQ karty graficznej

Post autor: pralat »

Pojde pozyczyc :)
Czas czekania wlasnie jest dobierany wlasnie eksperymentalnie. Dochodzi do tego jednak dodatkowa kwestia - to, ze zrobie sleep 1ms nie oznacza, ze proces faktycznie obudzi sie za 1ms - zazwyczaj bedzie to wiecej, ze wzgledu na obciazenie systemu i czestowliwosc, z jaka kernel przelacza procesy. Tak czy inaczej przy zwiekszonym priorytecie watku i skompilowaniu kernela z przelaczaniem 1000Hz dziala to jako-tako...
Awatar użytkownika
pralat
Użytkownik
Posty: 51
Rejestracja: 2005-12-02, 09:32
Lokalizacja: Opole

Re: IRQ karty graficznej

Post autor: pralat »

Sprawa jest malo istotna, ale napisze aktualizacje. :)
Zmienilem stery ma 8.28.8 i okazuje sie, ze synchronizacja nie ciagnie juz procka na 100%, jest praktycznie niezauwazalna pod wzgledem obciazenia. Moze za to przespac odpowiedni moment i jestesmy klatke obrazu do tylu.
ODPOWIEDZ