nVidia má od
NV40 dvě ALU na pixel pipeline
primární ALU zvládá MUL a je sdílená, takže buď provádí pixel shading, nebo se podílí na texturingu
sekundární ALU zvládá ADD a MUL (případně tedy MADD)
na dalších čipech NV4x byly zprovozněny mini-ALUs (na NV40 myslím buď nebyly, nebo nefungovaly naplno), které se podílejí na PS1.x. Každá z obou hlavních ALUs má jednu mini-ALU
Na
G7x byla přidána primární ALU i ADD instrukce, takže (stejně jako sekundární ALU) zvládá ADD+MUL.
Stejně jako předchozí, i zde má každá ALU jednu mini-ALU pro PS1.x
Vzhledem k tomu, že je primární ALU sdílená pro operace s texturou, je výkon NV40 a zvlášť G70 v pxiel shaderech dost závislý na množství operací s texturou. Takže pokud se provádí náročnější filtrace textur, nemůže primární ALU provádět pixel shading. Proto nVidia přistoupila k oněm "optimalizacím" filtrace textur, díky nimž je omezena práce s texturou a zbývá více taktů na pixel shading.
Další podstatná věc je, že obě hlavní ALU nejsou paralelní, ale "sériové", což znamená, že obě mohou pracovat na jednom pixelu (ne tedy každá na jednom). Pokud jde o krátký pixel shader, pro jehož provedení stačí jedna ALU, zůstává druhá nevyužita. Z tohoto důvodu je NV40/G70 dost závislá na optimalizacích ze strany vývojářů, kteří musí kód upravit tak, aby odpovídal architektuře karty, jinak zůstávají ALUs nevytíženy a výkon není takový, jaký by teoreticky měl být.
Naproti tomu ATi má od
R300 jednu hlavní ALU na pipeline a k ní jednu mini-ALU pro PS1.x, která ale byla ještě v průběhu vývoje čipu obohacena o ADD instrukci, protože se to ukázalo jako výhodné. Primární ALU disponuje ADD+MUL, sekundární tedy ADD.
Takto to zůstalo u R350, R420, R480 a R520. Od R520 je ale v čipu integrován dispatcher, který umožňuje integraci více
paralelních pixel shader jader do jedné "pipeline". Tato možnost byla využita na R580, která používá 3 paralelní pixel shader jádra na pipeline. To znamená, že při pixel shadingu pracuje jedna "pipeline" na třech pixelech zároveň, což vede k problému s názvoslovím (nedá se říct, že by R580 měla 16 pixel pipelines, ani 48 pixel pipelines). Samotná pixel shader jádra mají ale tutéž architekturu, jako u R300, tedy primární ALU (ADD+MUL) a mini-ALU (ADD). V podstatě byla doplněna jen branching unit.
Za zmínku ještě stojí, že od R300 (včetně) obsahuje pixel shader core ještě plně samostatnou texture adress ALU, takže operace s texturou nekonkurují pixel shadingu, což v kombinaci s oddělením TMU od pixel shaderu na R5xx vede k tomu, že operace s texturou jsou nezávislé do té míry, že ani složitější filtering textur nevede k výraznějšímu propadu výkonu a ATi si proto mohla dovolit implementovat angle-independent aniso, které na starších architekturách způsobovalo poměrně drastické propady výkonu.
Takže G7x je vhodnější v situacích, kde dochází k masivnějšímu využití PS1.x (více mini-ALUs), případně kde se používá MUL a hlavně v delších shaderech (maximum operací na jednom pixelu), které se ale nevětví a nevyužívají dynamic branching. Naproti tomu R580 vede tam, kde se používá buďto krátký kód a 48 paralelních ALUs tak dokáže zpracovat velmi vysoké množství pixelů, nebo pak naopak ve složitých větvených shaderech, které využívají dynamic branching, při kterém se naplno projeví UTDP.
Když už jsem se dostal takhle daleko, zmíním ještě, že G70 vyhovují spíše stencil shadows, kdežto R580 je lépe optimalizována pro shadow-mapy.
Pokud jsem napsal nějakou pitomost, tak mě kdokoli můžete opravit.