.[ ČeskéHry.cz ].
XNA a vytazenie procesoru

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Jefo



Založen: 02. 07. 2011
Příspěvky: 58

PříspěvekZaslal: 16. červenec 2013, 17:34:07    Předmět: XNA a vytazenie procesoru Odpovědět s citátem

Ahoj
robim jeden projekt v XNA a dost ma trapi vytazenie procesoru aplikaciou.
Ked zapnem holy program co mi vygeneruje prostredie tak mam vytazenie procesoru nasledovne :



Skusal som este spustit aplikaciu v TorqueX 2D a tam je vytazenie taketo :



Ako je mozne ze aplikacia v TorqueX ma ovela nizsie vytazenie na prvom jadre a este k tomu je cela zataz rozlozena rovnomernejsie na vsetky jadra procesoru ? Aky mate nazor na XNA co sa tyka vytazenia procesoru ?[/img]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 17. červenec 2013, 09:00:07    Předmět: Odpovědět s citátem

Nevím jak to je v XNA, ale jestli tam máš prázdnej main loop, bez jakýhokoliv brzdění (třeba vertical sync), tak to je uplně normální.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 17. červenec 2013, 19:49:47    Předmět: Odpovědět s citátem

Ziadne konkretne obrazky si nepostol, takze netusime co za problem vlastne mas, mimo toho, ze "sa ti nieco nepaci", ze to XNA robi inak ako Torque.

Pokial mas ale problem s CPU vykonom, tak problem bude rozhodne vyhradne na tvojej strane, ja som s XNA robil hodne na vsemoznych nehernych PC konfiguraciach, niekolkych XBOX-och a zopar WindowsPhones, ktore su z vyssie uvedeneho suverenne to najpomalsie, na com XNA oficialne bezi, a predsa som ani tam ziaden problem s CPU vykonom nezaregistroval.

XNA runtime na PC ti garantuje GarbageCollection na osobitnom jadre, takze na rozdiel od XBOX-u, kde sa ti runtime surovo zasekne aj na niekolko sekund (ak si kodil prasacky, a leakoval RAMku krista-krazom), na PC tento problem praveze nemas, kedze GC bezi paralelne na inom jadre (takze ti kod moze prasacky chrochtat, co ti srdce raci).

XNA runtime na WP7 ma generational GC, takze tento [podla mna primarny] runtime problem nenastava uz z principu. A predsa vsetko na phone bezi paralelne s tvojou hrou.

CompactFramework runtime na X360 funguje trochen inak, a XNA ma exkluzivne rezervovane jedno jadro pre runtime, hra ti bezi na inom, ktore, bohuzial, je zdielane aj OS XBOX-u, co je teda, hodne naprd - ale predsa dokazes aj s XNA z toho X-ka vytiahnut celkom dost - moj Western tam napr. uplne v pohode bezi v 1920x1080 s kopou efektov.
Ak by som si mal vybrat, ci mi XBOX bezi na 15% vykonu alebo 100%, tak si vyberam 100%, lebo je to konzola, na ktorej mi ma bezat hra, takze musi bezat na plne gule - BTW na PC by si azda chcel, aby ti z 8 jadier 6 lezalo uplne idle, a tie zvysne 2 bezali na 8% zatazi popri renderovani 3D grafiky ?!?



Takze, ak by si nahodou mal nejaky pocit, ze na PC to XNA nebezi dobre, tak si si pomylil platformu, pretoze na PC sa praveze s XNA robi suverenne najlahsie -mozes sa vrhnut na pouzivanie Stringov, enumov, Dictionaries a podobnychn .NET zverstiev, ktore ti leakuju megabajty RAMky za par sekund behu (kazde 2 MB sa ti totiz spusti GC).


Jo, a nezabudaj, ze XNA je de facto len wrapper nad DX9...
Sleepovat si kazdy frame skusal, ze co ti to spravi ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Jefo



Založen: 02. 07. 2011
Příspěvky: 58

PříspěvekZaslal: 19. červenec 2013, 21:31:19    Předmět: Odpovědět s citátem

Ono to je cele tak ze som zacal programovat 2D plosinovku. Ked som urobil nejake zakladne veci ako pohyb, skakanie, gravitacia a detekcia kolizii tak som sa pozrel ze ako mi to cele vytazuje procesor a ako vyuziva jednotlive jadra a bol som prekvapeny ze to prve jadro mam zatazene na maximalny vykon. Dakujem za komentar lebo som nevedel ze ako XNA vlastne pravuje a ze na prvom jadre bezi cela "GarbageCollection". Programujem len vo volnom case a do XNA moc nevidim tak ked narazim na urcite veci co neviem v XNA nastavit tak sem urcite este nejake to vlakno postnem.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



Založen: 18. 09. 2007
Příspěvky: 1533
Bydliště: u Prahy

PříspěvekZaslal: 20. červenec 2013, 16:57:59    Předmět: Odpovědět s citátem

Ten garbage collector ti ale nevytěžuje celé CPU, většinu bere tvá hra. Nějaká smyčka apod. V jedný svý hře (ne XNA, ale tam by se to udělalo stejně), jsem po dokončení snímku zbylý čas do požadovaného fps sleepoval a vytížení CPU spadlo na třetinu (a větrák notebooku se ztlumil) Wink.
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Jefo



Založen: 02. 07. 2011
Příspěvky: 58

PříspěvekZaslal: 22. červenec 2013, 13:27:11    Předmět: Odpovědět s citátem

Skusil som to s tym sleepnutim hernej slucky na 10ms a vytazenie procesoru kleslo na minimalne hodnoty. hra ide pekne plynule. dik
este by som sa vas chcel opitat ako pocitate FPS. Ja to robim nasledovne
kód:
FPS = 1.0f  /  (float)gameTime.ElapsedGameTime.TotalSeconds"

Stale aj ked sleepujem hernu slucku mi to pocita 60 FPS. kde robim chybu ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 22. červenec 2013, 17:11:17    Předmět: Odpovědět s citátem

Framy by som ti doporucil inkrementovat a kazdu sekundu to preratat nanovo (s tym, ze si jak cas, tak framecount - logicky - ulozis).

Ad 60 fps - zrejme mas zapnuty VSYNC. Nastav si GraphicsDeviceManager.SynchronizeWithVerticalRetrace, ked inicializujes gfx mod.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Jefo



Založen: 02. 07. 2011
Příspěvky: 58

PříspěvekZaslal: 22. červenec 2013, 18:55:27    Předmět: Odpovědět s citátem

Sprvil som to ako si napisal. Inkrementujem framy a pricitavam k apsolutnemu casu uplinuly za jedno opakovanie hernej slucky. ked sa apsolutny cas rovna alebo je o nieco vavsi ako 1.0f tak nastavim pocet snimkov a vynulujem premenne a pocitam odznova.
Ten VSYNC a GraphicsDeviceManager.SynchronizeWithVerticalRetrace sa mi doladit nepodarilo lebo ani neviem co to je. Ked sa pocet snimkov rovna nad 50 tak na to kaslem. Idem teraz riesit ine veci.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 22. červenec 2013, 19:33:32    Předmět: Odpovědět s citátem

Niekde, v tom sampli co pouzivas, sa ti inicializuje gfx mod a nastavuje sa rozlisenie. Len tam dopln jeden riadok s tou premennou co som ti napisal vyssie.

VSync predpokladam vies, co znamena, ci ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



Založen: 18. 09. 2007
Příspěvky: 1533
Bydliště: u Prahy

PříspěvekZaslal: 22. červenec 2013, 23:03:50    Předmět: Odpovědět s citátem

Jinak VSync můžeš mít klidně i 24 fps - když si pouštím 24Hz film na FullHD IPS TV a nechci, aby poskakoval každou sekundu obraz, tak musím na HDMI výstupu nastavit taky 24 Hz Smile (když si pouštíte film přes DLNA, tak to dělá automaticky TV; podobně automaticky to dělaj různá multimediální centra).
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Jefo



Založen: 02. 07. 2011
Příspěvky: 58

PříspěvekZaslal: 23. červenec 2013, 18:40:26    Předmět: Odpovědět s citátem

No stoho co som pochopil ten VSync nastavuje FPS na rovnaku frekvenciu ako je ta obnovovavia monitoru. To znamena ze ked mam tych 60 Hz tak mi to asi ani viac nepojde. Vypol som to GraphicsDeviceManager.SynchronizeWithVerticalRetrace. Teraz som to skusal a stale mi to pocita 50 FPS. Aj ked to vypnem.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 23. červenec 2013, 19:40:51    Předmět: Odpovědět s citátem

Tak ono, drivery vedia forcnut VSync, bez ohladu na to, co si ty nastavis, takze este by som to pozrel v driveroch.

Dalsia vec - pises teraz 50 fps, nie 60. To vyzera, ze tam mas uz celkom dost, ze mas CPU tak vytazene.

Skus si odremovat nejake CPU-intensive metody, ze na kolko ti vyskoci FPS v prazdnej scene.

Jaku mas GFX / CPU vlastne ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Jefo



Založen: 02. 07. 2011
Příspěvky: 58

PříspěvekZaslal: 24. červenec 2013, 12:03:57    Předmět: Odpovědět s citátem

No to FPS som vyriesil teraz takto :
kód:

class KalkulatorFPS
    {
        int pocetSnimkov = 0;
        float celkovyCas = 0f;
        public double FPS { get; set; }

        public void Aktualizuj(float cas)
        {
           
            celkovyCas = celkovyCas + cas;
            pocetSnimkov = pocetSnimkov + 1;
            if (celkovyCas >= 1.0f)
            {
                FPS = pocetSnimkov;
                pocetSnimkov = 0;
                celkovyCas = 0f;
            }
        }
    }


Tem cas nastavujem cez "gameTime.ElapsedGameTime.TotalSeconds".
Dava mi to teraz 60FPS. Neviem ako je to mozne ale ked som to robil cez Environment.TickCount tak mi to pocitalo iba 50 FPS. Vytazene CPU nemam lebo mam len par objektov v scene. rata to v pohode. Ten program spustam na iMac s nainstalovanym Windowsom cez BootCamp.
Graficku mam Radeon 6770m a procesor Intel Core i5-2500S. Ovladace original Apple.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



Založen: 16. 06. 2012
Příspěvky: 602

PříspěvekZaslal: 24. červenec 2013, 12:23:37    Předmět: Odpovědět s citátem

Tak mě napadá, jestli tam sleepuješ nebo používáš GetTickCount, že implicitně je ve Windows granularita pro Sleep i GetTickCount nějakých 16 ms (podle verze OSu), takže Sleep(1)..Sleep(16) by mohly dělat totéž.
Jediná možnost je nepoužívat GetTickCount ale timeGetTime a na začátku programu zavolat timeBeginPeriod(1) a na konci timeEndPeriod(1) - tímhle jsi schopen měřit čas/sleepovat s milisekundovou přesností (sleepovat bez záruky). Jediná nevýhoda je, že tohle trochu víc zatíží systém (ale v dnešní době pokud nemáš opravdu něco prastarého, by to neměl být absolutně problém).
Toto ale platí pouze pro C/C++, jak to mají řešené v tom, v čem děláš, nevím, pokud toto už používají (nedivil bych se), tak bude problém jinde.
Trochu OT: Jinak QPC bych nepoužíval vůbec, nemusí na to být spoleh - nevíš totiž, jak to mají řešené.
Myslím, že v poslední době jsou k dispozici speciální high precision časovače, takže tam by neměl být problém.
Dřív nejlepší, co bylo, byl rdtsc a v některých verzích systému se to používalo.
Některé starší multicore procesory ale měly zvlášť čítač pro každé jádro, takže pokud se ti vlákno, kde jsi to měřil, přeplo na jiný procesor, tak výsledek nebyl spolehlivý. No a nakonec tady máme moderní procesory s turbo boostem, takže rdtsc dnes není moc použitelný.
Obecně ve hře high performance časovače nevyužiješ, pokud tedy neprofiluješ. A i tam bych upřednostnil samplovací profilery (pro Windows skvělý open source Very Sleepy), výhoda je, že nemusíš vůbec instrumentovat (jen potřebuješ debug info a dost vzorků).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 26. červenec 2013, 08:05:13    Předmět: Odpovědět s citátem

no pri pouziti QPC je nutne uzamknut vlakno kde sa vola na jedno jadro inak to moze robit problemy. mam totiz pocit ze QPC pouzival prave rdtsc.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna