onsdag 23 januari 2013

GPU-prestanda Xbox 360 och Playstation 3

I föregående post gick jag igenom beräkningsprestanda i Playstation 3 och Xbox 360. Jag snuddade även vid att GPUn i Xbox 360 går att använda för GPGPU-beräkningar. I detta inlägg tänkte jag jämföra de två grafiklösningarna som används i Playstation 3 och Xbox 360.

Xenos som sitter i Xbox 360 är en modern typ av GPU med unified shaders och GPGPU-funktionalitet. Det går alltså att utföra annat än grafikberäkningar och prestandan påverkas inte av fördelningen mellan pixel- och vertexshaders i spel.

Xenos är föregångaren till R600, det vill säga Radeon 2900-/2600-/2400-serien.
En markant skillnad är hur ration mellan shaders, texture mapping units och ROPs ser ut.

Xenos: 6:2:1
2400: 10:1:1
2600: 30:2:1
2900: 20:1:1

Xenos har alltså förhållandevis extremt få shaders och ganska många texture units. Detta ger en hög fillrate, men låg beräkningskapacitet.

Faktiska siffror:
Xenos: 48:16:8
2400: 40:4:4
2600: 120:8:4
2900: 320:16:16

Xenos har inget dedikerat vram utan är ansluten till en stor minnespool på 512MB som den delar med Xboxens CPU. Däremot har Xenos 10MB edram anslutet, dit den skriver delar av sin framebuffer (tiled rendering).

Edramet har också extra logik anslutet för att avlasta Xenos med anti alias, alpha compositioning och stencil buffering. Data som processas av denna logik har en bandbredd av 256GB/s vidare mot Edramet! Operationer som alpha compositioning och stencil buffering görs normalt av ROP, så räknar man in detta har Xenos ett väldigt högt antal ROPs i förhållande till shaders.

RSX som sitter i Playstation 3 är baserad på Geforce 7800. Detta är en äldre typ utan unified shaders eller GPGPU-stöd. RSX har 24st pixel shaders och 8st vertex shaders.

Till skillnad från Xenos har RSX dedikerat minne på 256MB. Bandbredden är på 22.4GB/s vilket är markant lägre än 7800GTX. RSX kan också mappa in ramminne om 256MB inte skulle räcka, då sjunker prestandan till 15GB/s läs och 10GB/s skriv.

RSX: 22.4GB/s 128bit, 1400MHz GDDR3
7600GT: 22.4GB/S 128bit, 1400MHz GDDR3
7800GS: 38.4GB/s 256bit, 1200MHz GDDR3
7800GTX: 38.4GB/s 256bit, 1200MHZ GDDR3

Även om RSX är baserad på 7800GTX är det en något bantad modell, som hamnar någonstans mellan GTX och GS om man tittar på pixel shaders, vertex shaders, texturing units och ROPs.

RSX: 24:8:24:8, 550MHz
7600GT: 12:5:12:8, 560MHz
7800GS: 16:8:16:8, 375MHz
7800GTX: 24/8/24/16, 430MHz

Ser man till förhållandet mellan dem, verkar det mer normalt än för Xenos:
RSX: 3:1:3:1
7600GT: 2.4:1:2.4:1.6
7800GS: 2:1:2:1
7800GTX: 3:1:3:2

Normaliserar vi med klockfrekvens ser vi följande:
Xenos: 132:44:132:44
7600GT: 67:28:67:45
7800GS: 60:30:60:30
7800GTX: 103:34:103:69

Men om vi jämför korten hur ser prestandan ut då?
Bandbredden är komplicerad att räkna in, eftersom Xenos bandbredd både beror på edram och det delade minnet, precis som att RSX kan mappa ram om det behövs. Därför tänker jag bara gå genom rå beräkningsprestanda.

Antal operationer per sekund:
RSX: 400GFlops, (24 pixel s. * 27ops + 8 vertex s. * 10ops) * 550MHz
Xenos: 240GFlops, 48 shaders * 10ops * 500MHz

Här är den teoretiska prestandan i RSX markant högre, men det kräver perfekt fördelning av pixel- och vertex-shaders medan Xenos behåller sitt värde oavsett fördelning. Vid en fördelning av 24/16 kommer RSX bara hantera 200GFlops exempelvis.

Antal shaderoperationer per sekund:
RSX: 75 Miljarder, (24 Pixel s. * 5 ALU + 8 vertex s. * 2 ALU) * 550MHz
Xenos 96 Miljarder, 48 * 4 ALU * 500MHz

Här gäller också perfekt fördelning för att RSX ska uppnå sina värden.

Texel fillrate
RSX: 13.2 GigaTexels, 24 texture units * 550MHz
Xenos: 8 GigaTexels, 16 texture units * 500MHz

Pixel fillrate
RSX: 4.4 Gpixels, 8 ROPs * 550MHz
Xenos: 4 Gpixels, 8 ROPs * 500MHz

Z sample rate
RSX: 8.8 GigaSamples, 2x Z-samples * 8 ROPs * 550 MHz
Xenos: 8 GigaSamples, 2x Z-samples * 8 ROPs * 500 MHz
Att ha möjlighet till två Z-samples är något som kan utnyttjas för att köra två pass över scenen som ska renderas. Första gången samplar man vad som ligger längst fram i bild, så att det som ligger bakom kan ignoreras om det är täckt.

Som vi kan se är fillrate och sample rate högre, däremot är shaderoperationer lägre. Pixel fillrate på 360 ska vara exakt matchat mot edram för att kunna utföra 4xAA vid hd-upplösningar.
http://www.beyond3d.com/content/articles/4/4

Något som siffrorna inte kan visa är att Xenos är effektivare under ojämn last, samt hur hög praktisk effektivitet grafiklösningarna faktiskt har under last.



Beräkningsprestanda i 360 och PS3

Nu är det snart dags för nästa generation av Playstation och Xbox. I och med detta väcks diskussionerna om prestanda i nuvarande generation.

En vanlig tolkning är att Playstation 3 skulle ha högre prestanda än Xbox 360, men varifrån kommer denna tolkning från och stämmer den?

Tolkningen kommer från att Cell-CPUn i PS3 har teoretisk topprestanda som ligger över den i Xbox 360.

Cellprocessorn i Playstation 3 består av en PPE, en traditionell CPU samt 7st SPU-enheter. SPU-enheterna är avsedda att effektivt kunna beräkna flyttalsoperationer och är jämförbara med vad man hittar i ett modernt grafikkort med GPGPU-funktionalitet.

Xbox 360 har en CPU, Xenon, som består av 3st PPE-enheter och inga SPU-enheter. Microsoft har gjort några mindre ändringar till Altivec-enheten i PPEn. Det nya instruktionssetet kallas VMX128 och är inte bakåtkompatibelt med Altivec.

En annan skillnad mellan PPE i Cell och Xenon är att Xenon har 1MB Cache som delas mellan kärnorna, medan Cell har 512KB cache till PPEn. Således bör enkeltrådad prestanda vara högre på Xenon, men det finns ingen praktisk anledning att köra sådan kod.

Jag roade mig med att jämföra teoretisk prestanda mellan de två. Notera att jag bara räknar med 6 SPUer eftersom den sjunde är reserverad av systemet i Playstation 3.

Flyttal, single precision
360: 3x 25.6 = 76.8 GFlops
PS3: 1x 25.6 + 6x 25.6 = 179.2 GFlops

Det är oftast här jämförelsen slutar och så säger man att PS3 är snabbast. Men låt oss fortsätta:

Flyttal, double precision
360: 3x 6.4 = 19.2 GFlops
PS3: 1x 6.4 + 6x 1.8 = 17.2 GFlops

Xbox 360 har också en modernare GPU, Xenos, denna har GPGPU-funktionalitet, till skillnad från RSX i PS3. Vi kan alltså låta Xenos göra beräkningar, om än bara i single precision.

Flyttal, single precision
360: 3x 25.6 + 240 = 316.8 GFlops
PS3: 1x 25.6 + 6x 25.6 = 179.2 GFlops

I teorin är alltså Xenon + Xenos snabbare än Cell oavsett om vi vill beräkna single- eller double precision.