Varför inte bara läsa den här länken? http://www.neogaf.com/forum/showthread.php?t=184843 eller kanske se vad DICE gjorde för jobb för att utveckla BF3 till PS3? http://www.slideshare.net/DICEStudio/spubased-deferred-shadin...
Men lite slutledningsförmåga räcker för att lista ut att det är komplicerat. Tänk att du utvecklar ett mutiplattformsspel, för det är vad utvecklare brukar göra när de vill tjäna pengar. Vi kan börja med att jämföra PC, PS3 och 360.
Till PC och 360 har du flera generiska CPU-kärnor medan till PS3 har du Cell med 1 traditionell kärna och 6st SPUer.
Grafikkort
Till PC och Xbox 360 har du programmerbara stream shaders på grafikkortet, inte till PS3an, så vill du ha motsvarande effekter får du lösa det på annat sätt. En vanlig lösning är att utnyttja SPUerna. 360 har ett grafikkort som har mycket DX10-funktionalitet, PS3 har DX9, om man vill jämföra med PC.
Vill du köra AA på 360 är detta ganska billigt i och med de 10MB edram som sitter på 360 för just detta, på PS3 är det en ganska dyr operation, därför löser man gärna detta på SPU-nivå, med lösningar liknande FXAA/MLAA.
RAM
Till PC har du en uppsjö med ram och vram. Till 360 har du en pool på 512MB du kan fördela hur du vill, på PS3 har du 256MB ram/256MB vram låst.
Visst, du kan mappa ram som vram åt gpu:n, men då till en prestandaförlust på 30-40%. För att göra situationen än värre, så är prestandan trasigt låg om du ska utnyttja VRAM som Ram åt CPUn, så behöver du mer ram måste du skyffla runt data mellan vram och ram.
http://www.theinquirer.net/inquirer/news/1007286/ps3-hardware...
OS
Sen ska vi inte glömma det inbyggda operativsystemet, det drar resurser med. Från början drog PS3ans XMB 1 SPU och 120MB minne ur ram/vram. På 360 drog dashboarden endast 32MB ur poolen. Men till PS3ans försvar så har minnesanvändningen sjunkit. Det senaste jag läste var att XMB drog 43MB ram och 7MB vram. http://research.scee.net/files/presentations/acgirussia/Hardw...
Usecase
Så tillbaka till tanken att vi ska utveckla ett häftigt multiplattformsspel. Tänk BF3 eller GTA4. Spelet nyttjar många CPU-kärnor och vill så klart ha massor av ram och grafikminne.
På PS3 har vi bara en traditionell CPU-kärna, så redan här får vi problem. Vi måste lista ut hur vi ska kunna lyfta loss bitar av koden för att köra på SPU istället. Har vi tur har vi kodsnuttar där detta går, har vi otur blir vi fast på huvud-cpun med för lite prestanda.
Vad gäller minnesmängden så har vi mindre minne att tillgå och detta är dessutom låst. Behöver vi extra VRAM är detta ganska lättlöst mot en prestandaförlust, mer RAM är däremot värre, eftersom vi endast kan låna VRAM som cache, inte utnyttja som ytterligare en minnesbank.
Grafikkortet har inte unified shaders, så vi måste hålla shaderanvändandet jämnt fördelat för att inte tappa prestanda. Behöver vi göra egna shaders måste vi utnyttja SPUs till detta. Ska vi köra med AA, bör vi utnyttja SPUs till det.
Även om PS3ans devkit löser många av dessa problem åt mig, så är det fortfarande så att hårdvaran är väldigt annorlunda och sätter en del begränsningar.
Ett utmärkt exempel på komplexiteten med att utveckla för PS3 är BF3. Dice har papers på allt häftigt de har gjort för att hämta prestanda ur Cell, men slutresultatet var trots detta input lag.
Beräkningsprestanda
Eftersom vi alla älskar siffror, låt oss hämta lite specifikationer från wikipedia och göra ett hypotetiskt benchmark. PS3an får utnyttja Cell och 360n får utnyttja CPU och GPGPU-funktionalitet (som PS3 saknar). Jag vet att PS3 har 7st SPUer, men under Linux eller spel är endast 6st tillgängliga eftersom 1 SPU är dedikerad till XMB och Hypervisor. 1 SPU är dock inte tillräcklig för att förändra "vinnaren" i prestanda.
Vi börjar med best case som är single precision.
360+GPU: 3x25.6CPU + 240GPU = 265.6GFLOPS
PS3: 25.6CPU + 6*25.6 SPU = 179.2GFLOPS (den sjunde SPUn är upptagen med XMB och hypervisor)
360 endast CPU = 76.8GFLOPS
Okej, så vi prövar i double precision, mig veterligen har Xenos inte stöd för detta eftersom R600, som bygger på Xenos, saknar det.
360: 3*6.4CPU = 19.2 GFLOPS
PS3: 6.4CPU + 6*1.8SPU = 17.2 GFLOPS
Något annat som ibland dyker upp i dessa diskussioner är antalet trådar som kan exekveras.
PS3 kör 2st trådar på PPE och 1 tråd per SPU, totalt 8st
360 kör 2st trådar per kärna (3st) och kan köra 3 trådar på gpgpu, totalt 9st
Jag hoppas detta slog hål på den långlivna myten om Cells överlägsna prestanda. Det är en riktigt häftig och annorlunda CPU, men det är ingen magi om man ser till vad den gör jämfört mot ett grafikkort. Man kan se den som en tight APU där GPU-delen delar minneskontroller med CPUn.
Om du ser Cell som en GPGPU ser du ganska snabbt att 200GFLOPs är tämligen lågt. Blir omkört av Xbox 360, Radeon 2900 och Geforce 8800. Eller i moderna kort mätt, Geforce GT 620 och Radeon 7450.
Blandade källor och länkar:
http://en.wikipedia.org/wiki/Cell_%28microprocessor
http://en.wikipedia.org/wiki/Xenos_%28graphics_chip%29
http://www.ps3devwiki.com/wiki/CELL_BE
http://news.bbc.co.uk/2/hi/technology/8254159.stm
http://research.scee.net/files/presentations/acgirussia/Hardw...