Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 22. leden 2010, 16:44:09 Předmět: +1 nepoužitá instrukce = fps poloviční |
|
|
Zdravím,
chtěl jsem se jen zeptat na pár zkušeností s programováním shaderů, přesněji GLSL. Zajímalo by mne, co se v GPU děje v následující situaci?:
Mám relativně složitý shader, který nahraji do paměti - vše běží v pohodě, na slabším PC kolem 45 fps. Pokud ale do shaderu připíšu několik dalších instrukcí (je jedno kterých) - fps klesne o více než polovinu a je úplně jedno, že instrukce v shaderu ani není volána (např je ve slepém IFu). Je možné, aby počet instrukcí v shaderu dokázal takto fps snížit? |
|
Návrat nahoru |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 22. leden 2010, 16:47:23 Předmět: Re: +1 nepoužitá instrukce = fps poloviční |
|
|
Ještě bych dodal, že se to děje na všech testovaných grafických kartách
(NV Quatro 1500M, NV 9800GT, NV 260 GTX) |
|
Návrat nahoru |
|
 |
MePHyst0
Založen: 28. 07. 2007 Příspěvky: 85 Bydliště: SVK/CZK
|
Zaslal: 22. leden 2010, 17:07:21 Předmět: |
|
|
ako vyzera ten shader? |
|
Návrat nahoru |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 22. leden 2010, 17:38:39 Předmět: |
|
|
MePHyst0 napsal: |
ako vyzera ten shader? |
Zakládní shader je:
http://nopaste.ceske-hry.cz/222864
Kde funkce objectMaterialMain a doSkinning jsou dynamicky linkovány k tomuto shaderu. Příklad, kde problém nastává je:
objectMaterialMain: http://nopaste.ceske-hry.cz/222865
doSkinning: http://nopaste.ceske-hry.cz/222866
Pokud zakomentuji ve funkci doSkinning např řádek 62, fps stoupne. Je důležité abych uvedl, že při spuštění aplikace je APPLY_SKINNING nastaven na 0, tj. doSkinning se vůbec nezavolá.
Naposledy upravil klapauciusk dne 23. leden 2010, 15:07:54, celkově upraveno 1 krát |
|
Návrat nahoru |
|
 |
JohnyDog

Založen: 17. 08. 2007 Příspěvky: 66
|
Zaslal: 22. leden 2010, 18:02:03 Předmět: |
|
|
klapauciusk napsal: |
Pokud zakomentuji ve funkci doSkinning např řádek 62, fps stoupne. Je důležité abych uvedl, že při spuštění aplikace je APPLY_SKINNING nastaven na 0, tj. doSkinning se vůbec nezavolá. |
Bliz jsem nezkoumal ale tipoval bych ze presahnes pocet povolenych instrukci pro dany profil takze se shader musi volat nadvakrat. APPLY_SKINING mas jako uniform takze kompiler musi prelozit a nahrat vsechny vetve protoze nevi ktera se bude volat. Doporucuju stahnout nvidia Cg toolkit, shader prelozit do assembleru v tom kterem profilu a podivat se kolik ma instrukci/pouzitych registru. _________________
 |
|
Návrat nahoru |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 22. leden 2010, 21:37:55 Předmět: |
|
|
JohnyDog napsal: |
Doporucuju stahnout nvidia Cg toolkit, shader prelozit do assembleru v tom kterem profilu a podivat se kolik ma instrukci/pouzitych registru. |
Cg toolkit jsem si sice stáhl, ale nejsem si úplně jist, jak dostat GLSL shader do assembleru a potřebnou informaci zjistit. Mohl by jsi prosím trochu upřesnit postup? |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 22. leden 2010, 23:05:30 Předmět: |
|
|
cgc -oglsl -profile arbvp1 < glslshader > asmshader
... nebo tak nějak. Viz help k cgc.
Taky má smysl poznamenat, že arbvp1 neumí podmínky a převádí větvený kód na nevětvený, což je dost drahé. Zkus nějaký novější profile na vertex shadery, gp4vp nebo něco podobného by mělo stačit. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 23. leden 2010, 15:05:05 Předmět: |
|
|
Tak pod profilem arbvp1 to ani zkompilovat nelze, nesplňuji podmínku 96 const registrů (3 chyby). Pokud kompiluji bez explicitně nastaveného profilu, shader zkompilovat též nelze (2 chyby). Pokud použiji profil gp4vp, kompilace proběhne v pořádku (268 instrukcí).
http://nopaste.ceske-hry.cz/222863
Mohu přímo v opengl nějak ovlivnit profil, který se používá? |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 23. leden 2010, 16:01:26 Předmět: |
|
|
OpenGL automaticky použije ten nejlepší možný profil. Ono nemá na výběr, protože GPU reálně podporuje jen jeden, ty starší se do toho novějšího převádí. Pro G80 grafiky se nejspíš vždy použije gp4vp. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 23. leden 2010, 16:05:08 Předmět: |
|
|
Ještě se mi podařilo dostat assembler přímo z GLSL. Tam má, onen vertex shader, 196 instrukcí a používá 6 registrů, profil, který je použit je VP40.
Edit: Doplňuji že mám NV Quatro 1500M, tj. sedmičková řada. |
|
Návrat nahoru |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 23. leden 2010, 16:15:33 Předmět: |
|
|
Zkusil jsem si získat asc kod i na NV 260 GTX a potvrzuji, že se použije schéma gp4vp. Pokles fpska je tedy na první pohled na profilu nezávislí. |
|
Návrat nahoru |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 23. leden 2010, 16:29:17 Předmět: |
|
|
Po dalším zkoumání zjišťuji, že pokles způsobuje také použití modifikátoru inout. Což předpokládám dává smysl, protože inout používá oproti out více instrukcí.
Začínám uvažovat vše přepsat do cg, jenže nemohu vědět, zda mi to pomůže...  |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 23. leden 2010, 18:20:33 Předmět: |
|
|
Nepomůže, protože NVIDIA GLSL compiler v driveru není nic jinýho než cgc -oglsl.
Možná bych doporučil nepoužívat uniform proměnné na všechno a raději vygenerovat 2 shadery - jeden s podmínkou vždy true a druhý pro false. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 23. leden 2010, 18:36:31 Předmět: |
|
|
Eosie napsal: |
Možná bych doporučil nepoužívat uniform proměnné na všechno a raději vygenerovat 2 shadery - jeden s podmínkou vždy true a druhý pro false. |
Asi to tak dopadne, můj problém to ale stejně nevyřeší, protože fps poklesne v okamžik, když se vyskytuje na scéně jeden model s tímto shaderem ...
No, děkuji všem za pomoc, bude to boj - do shaderů má ještě několik věcí přibýt
EDIT: To co píšeš, tam vlastně svým způsobem mám, protože že APPLY_SKINNING je nastaven na 1 pouze pokud přilinkovaný shader s tělem funkce doSkinning má nějaké tělo. A doSkinning má tělo pouze pokud je skinning u dané geometrie použit.
Naposledy upravil klapauciusk dne 24. leden 2010, 15:12:57, celkově upraveno 1 krát |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 23. leden 2010, 19:09:55 Předmět: |
|
|
Nevím, jestlis to tu psal, ale jaký je počet instrukcí a temporaries obou variant shaderů? Na sedmičkovou řadu použij profil vp40. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
|