Ho letto molto sui vantaggi dell'organizzazione dei dati in "Struct of Arrays" (SoA) anziché nel tipico "Array of Structs" (AoS) per ottenere un throughput migliore quando si utilizzano le istruzioni SIMD . Mentre il "perché" ha un senso totale per me, non sono sicuro di quanto fare quando si lavora con cose come i vettori.
I vettori stessi possono essere considerati come una struttura di una matrice di dati (dimensioni fisse), quindi è possibile convertire una matrice di questi in una struttura di matrici X, Y e Z. Attraverso questo, puoi lavorare su 4 vettori contemporaneamente anziché uno alla volta.
Ora, per il motivo specifico, sto pubblicando questo su GameDev:
Ha senso lavorare con i vettori sulla SPU? Più specificamente, ha senso eseguire il DMA su più array solo per un singolo vettore? O sarebbe meglio attenersi al DMAing della matrice di vettori e srotolarli nei diversi componenti con cui lavorare?
Potrei vedere il vantaggio di eliminare lo srotolamento (se lo facessi "AoS"), ma sembra che potresti esaurire rapidamente i canali DMA se prendessi questa strada e lavorassi con più set di vettori contemporaneamente.
(Nota: nessuna esperienza professionale con Cell ancora, ma sono stato in giro in OtherOS per un po ')