Cellen är väldigt speciell att koda på. Den är inte det minsta lik en multi core x86. Det är en massa pill för att få något gjort öht.
Ta tex minneshantering. Varje SPU har 256kiB local store (vilket är spu'ns "ram"). För att få data mellan primärminne och ls använder man dma-calls. Man beställer dma-överföring av upp till 16kiB chunks mellan primärminne och ls. För att få lite fart vill man dubbelbuffra, dvs man räknar på en buffer medans mfc'n (spu'ns dma-controller) pumpar data mellan en annan buffer och minnet. Ovanpå detta kommer alignment. För att kunna föra över mer än 16b måste source och target-buffrarna vara 16 byte align. För att få ut mer än ca halva minnesbandbredden måste allt vara 128 byte aligned. Sen kommer det en hel drös med ytterligare detaljer på dma, och ytterligare pill om man vill köra inter-spu-kommunikation (vilket man vill för synkronisering mm, och för att minnesbussen blir full rätt fort).
Sen kommer saker med SIMD och vektorer vilket också är lite småknepigt att få till. Och SIMD-optimera vill man. En vektor är 4 floats, och det går normalt fortare att räkna på en hel vektor än en ensam skalär (pga aligmentgrejer mm).
SPU:erna är även värdelösa på "vanlig kod". De har ingen magisk branchprediction. Ifsatser, funktionsanrop m.m. förstör prestandan helt.
Den klarar peak 25GFLOPS per SPU, och den är förbannat snabb om man lyckas få till det. Dock så skulle jag inte förvänta mig att komma ens i närheten av 25GFLOPS per SPU, i alla fall inte om man gör något annat än matris-matris-multiplikation, gauseliminering eller så (enkla beräkningar med kvadratiskt antal operationer mot antalet operander). Jag har kommit upp till kring 22GFLOPS på en SPU med ett syntetiskt test. 1-9 är väl mer troligt när verkligheten tränger sig på.
Hur fort det går att få beroror helt på problemet.
Väldigt spännande platform, men ger inget gratis.
PS3:ans stora problem är minnet. de ca 210MiB'en som är över när hypervisorn tagit sitt räcker ju inte så särskilt långt. Fedora Core med SDK 3.0 rullar fint på den. SPU management har blivit mycket bättre sen de tidigare SDKna.
(Ursäkta för det slarviga inlägget och alla ej översatta begrepp, sitter och skriver på min exjobbsrapport i ämnet på engelska och orkar inte byta fack-språk )