Oltre a tutto ciò che George menziona, le SPU vengono pensate molto meglio come processori vettoriali in streaming. Funzionano meglio quando si ha un algoritmo che lavora su lunghe sequenze di dati numerici, che possono essere alimentati attraverso la memoria limitata della SPU tramite DMA, piuttosto che avere la SPU caricare un blocco di memoria, provare a operare su di essa, scoprire che è necessario per seguire un puntatore da qualche parte al di fuori della sua memoria, carica che, continua, trova un altro e così via.
Quindi, programmare per loro non è un semplice modello di concorrenza e thread; è più simile al calcolo numerico o scientifico ad alte prestazioni. È anche l'accesso alla memoria non uniforme portato all'estremo.
Inoltre, ogni processore è in ordine con condutture profonde, quindi il programmatore deve essere molto più consapevole dei pericoli di dati e delle bolle di istruzioni e di tutte le numerose micro-ottimizzazioni che ci viene detto che il compilatore "dovrebbe" occuparsi di per noi (ma in realtà non lo è). Cose come dirette errate, load-hit-stores, cache cache, ecc. Fanno molto più male di quanto farebbero su un processore out-of-order che potrebbe manipolare l'ordine delle operazioni in giro per nascondere tali latenze.
Per esempi concreti, controlla il blog di Mike Acton CellPerformance. Mike è il mio assemblee della vecchia scuola preferito, un perfetto screziatore del mondo degli affari, e si è davvero guadagnato le sue costolette su questo argomento.
Glib risposta: "dolore e sofferenza!" –