.[ ČeskéHry.cz ].
+1 nepoužitá instrukce = fps poloviční
Jdi na stránku 1, 2  Další
 
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
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 22. leden 2010, 16:44:09    Předmět: +1 nepoužitá instrukce = fps poloviční Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 22. leden 2010, 16:47:23    Předmět: Re: +1 nepoužitá instrukce = fps poloviční Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
MePHyst0



Založen: 28. 07. 2007
Příspěvky: 85
Bydliště: SVK/CZK

PříspěvekZaslal: 22. leden 2010, 17:07:21    Předmět: Odpovědět s citátem

ako vyzera ten shader?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 22. leden 2010, 17:38:39    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
JohnyDog



Založen: 17. 08. 2007
Příspěvky: 66

PříspěvekZaslal: 22. leden 2010, 18:02:03    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 22. leden 2010, 21:37:55    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 22. leden 2010, 23:05:30    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 23. leden 2010, 15:05:05    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 23. leden 2010, 16:01:26    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 23. leden 2010, 16:05:08    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 23. leden 2010, 16:15:33    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 23. leden 2010, 16:29:17    Předmět: Odpovědět s citátem

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... Sad
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 23. leden 2010, 18:20:33    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 23. leden 2010, 18:36:31    Předmět: Odpovědět s citátem

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 ... Confused

No, děkuji všem za pomoc, bude to boj - do shaderů má ještě několik věcí přibýt Shocked

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 23. leden 2010, 19:09:55    Předmět: Odpovědět s citátem

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
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
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
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