Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 12. srpen 2012, 09:22:32 Předmět: DX11 - málo FPS - memory leaky |
|
|
Mám "divný" problém...
Pokud pustím mojí DX11 aplikaci poprvé po startu počítače, vše je OK... klasicky 60FPS... několik opakovaných spuštění je taktéž OK.
Jenomže po určitém čase se při novém spuštění aplikace neuvěřitelně zpomaluje. A FPS se pohybuje okolo 5 snímků.
Přitom CPU má vytížení pořád stejné.. takže to musí být GPU... nicméně netuším proč.
Nějaký nápad ? _________________ Perry.cz
Naposledy upravil perry dne 14. srpen 2012, 16:09:23, celkově upraveno 1 krát |
|
Návrat nahoru |
|
|
Aroidzap
Založen: 14. 11. 2011 Příspěvky: 68
|
Zaslal: 12. srpen 2012, 11:50:14 Předmět: |
|
|
Asi se to bude hledat tezko, ale byt tebou, sel bych vyrazovaci metodou, proste vypinej na gpu ruzne veci dokud to nepobezi... tak ja resim vetsinu veci a vetsinou uspesne |
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 12. srpen 2012, 12:43:43 Předmět: |
|
|
Renderer jsem omezil více-méně na terén... povypínal jsem post-process apod.
Jediný co tam je, a vypnout nejde, je deferred rendering... Ale s tím dřív problémy nebyly... podezírám driver GPU... protože když se to "začne hnojit" tak takty GPU jsou zhruba 1/3 oproti normálnímu stavu (300MHz místo 1GHz). _________________ Perry.cz |
|
Návrat nahoru |
|
|
OndraSej
Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 12. srpen 2012, 12:54:25 Předmět: |
|
|
perry> nějaký problém s driverem? s přehříváním? s uvolňováním zdrojů ve tvé aplikaci?
Asi zkus opdovědět na následující otázky:
1. děje se to jen u tvojí aplikace, nebo i u ostatních DX11 aplikací/her? (děje se to u OpenGL aplikací? U DX9/DX10 aplikací?)
2. pokud ne, děje se to u starších verzí aplikace? _________________ http://trionteam.net |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 12. srpen 2012, 14:06:54 Předmět: |
|
|
Mohly by to být resource leaky, třeba neuvolněné textury, které neustále přibývají. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 12. srpen 2012, 15:20:40 Předmět: |
|
|
citace: |
1. děje se to jen u tvojí aplikace, nebo i u ostatních DX11 aplikací/her? (děje se to u OpenGL aplikací? U DX9/DX10 aplikací?) |
Neděje... jiné aplikace běží korektně.
citace: |
2. pokud ne, děje se to u starších verzí aplikace? |
Děje... tam se to dřív nedělo.. takže změnama v kódu to asi nebude
Zkusím projet memory-leaky na GPU... ale co mi píše GPU-Ram manager, zabráno je asi 200MB / 1 GB _________________ Perry.cz |
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 12. srpen 2012, 17:05:08 Předmět: |
|
|
Hm.. takže DX11 Debug mode hlásí memory leaky na GPU.... nicméně nedaří se mi je dohledat...
např: 45 Textur... problém je, že všechny textury mám v Manageru, který je taky hromadně uvolní... takže nevím kde to může zůstat viset..
Plus třeba absolutně nepobírám tohle:
citace: |
D3D11: WARNING: Live Device: Name="unnamed", Addr=0x006960B8, ExtRef=41 [ STATE_CREATION WARNING #2097297: LIVE_DEVICE ] |
_________________ Perry.cz |
|
Návrat nahoru |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 13. srpen 2012, 08:26:48 Předmět: |
|
|
Tento warning znamena, ze mas 41 (fakt dost mrte ) referencii na tvoj Device v momente, ked DX konci... Takze si 41x zabudol zavolat Release aspon na tomto objekte. Predpokladam, ze tam budes mat aj riadky typu:
citace: |
D3D11: WARNING: Live Texture2D: Name="unnamed", Addr=0x006960B8, ExtRef=0, IntRef=2... |
Co sa tyka IntRef, tak to su interne zalezitosti DX, ale ExtRef je pocet referencii, ktore vyrobil tvoj kod a musis ich vsetky vycistit... _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 13. srpen 2012, 09:10:28 Předmět: |
|
|
Předpokládáš správně... nicméně problém je v tom, že netuším, kde jsem nabral 45 referencí. Navíc přidávám si do PrivateInfo jméno textur apod, takže "unnamed" taky nechápu, kde se bere.
to musím uvolňovat i tohle ? :
kód: |
class X
{
ID3D11Device * device;
}
....
ID3D11Device * device = vytvorDevice();
X->device = device;
---> X->device->Release(); // tohle mam volat taky ?
device->Release();
|
_________________ Perry.cz |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 13. srpen 2012, 12:34:53 Předmět: |
|
|
Třeba ty textury si drží i referenci na device. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 13. srpen 2012, 14:50:34 Předmět: |
|
|
Ano, to je pravda, musis proste uvolnit vsetko I niektore na prvy pohlad necakane volania zvysuju ref count... Ale to sa da vsetko dohladat. No a pre kazde zvysenie musi prist aj release. Tak napriklad ID3D11Device::CreateShaderResourceView(tex, &desc, &srv) zvysi ref count u "tex", preto musis niekedy zavolat i tex->Release() (a samozrejme srv->Release()). To ale este nutne neznamena, ze sa hned znizi na 0, ze. _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
|
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 13. srpen 2012, 15:05:05 Předmět: |
|
|
perry napsal: |
Předpokládáš správně... nicméně problém je v tom, že netuším, kde jsem nabral 45 referencí. Navíc přidávám si do PrivateInfo jméno textur apod, takže "unnamed" taky nechápu, kde se bere.
to musím uvolňovat i tohle ? :
kód: |
class X
{
ID3D11Device * device;
}
....
ID3D11Device * device = vytvorDevice();
X->device = device;
---> X->device->Release(); // tohle mam volat taky ?
device->Release();
|
|
tady ne! - doporucuju zjistit jak funguje ref-counting v COMu .... |
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 13. srpen 2012, 17:47:07 Předmět: |
|
|
No uvolnit všechno... problém je, že nemůžu najít co neuvolňuju.
Na Textury mam manager - bez něj žádnou nevytvořím, a pak to celé projdu a uvolním (jak SRV, tak přímo Texture)
To samé shadery - uvolním Const buffery, RWStructuredBuffery, StructuredBuffery atd
InputLayout taky přes manager
Co mi může viset jsou ostatní věci... nicméně to nevysvětluje 45 neuvolněných textur, kde půlka má name="unnamed" a některé mají přímo jméno co jsem nastavil. Přitom u těch textur 100% vím, že jsem volal Release
Plus něco má IntRef = 0 a ExtRef = 0
citace: |
tady ne! - doporucuju zjistit jak funguje ref-counting v COMu .... |
To jsem napsal už jen ze zoufalosti _________________ Perry.cz |
|
Návrat nahoru |
|
|
|