ho una struttura che assomiglia a questo:più veloce possibile struct-di-array per array-di-Structs conversione
struct SoA
{
int arr1[COUNT];
int arr2[COUNT];
};
E voglio farlo sembrare come questo:
struct AoS
{
int arr1_data;
int arr2_data;
};
std::vector<AoS> points;
come rapidamente possibile. L'ordine deve essere conservato.
Costruisce ciascun oggetto AoS
singolarmente e lo spinge indietro nel modo più veloce per farlo, oppure esiste un'opzione più veloce?
SoA before;
std::vector<AoS> after;
for (int i = 0; i < COUNT; i++)
points.push_back(AoS(after.arr1[i], after.arr2[i]));
ci sono SOA/AoS relative domande su StackOverflow, ma non ho trovato uno correlate a più rapida possibile conversione. A causa delle differenze di impaginazione strutturale non riesco a vedere alcun modo per evitare di copiare i dati da un formato all'altro, ma spero che qualcuno possa dirmi che esiste un modo per fare semplicemente riferimento ai dati in modo diverso ed evitare una copia.
Off the wall soluzioni particolarmente incoraggiate.
Dubito che sia possibile "fare semplicemente riferimento ai dati in modo diverso", poiché ha una diversa disposizione in memoria. – immibis
E dovrai inserire/spingerli comunque, altrimenti il tuo 'vector' non sarebbe in stato valido. –
Si noti che la referenziazione dei dati in modo diverso potrebbe non essere più veloce di una copia ... Le cache RAM sono più efficaci quando si legge o si scrive la memoria in modo lineare, e fare un sacco di dereferenziazioni potrebbe spezzare quel modello, causando molti errori di cache e quindi esecuzione più lenta. (o forse no, ma la cosa fondamentale è misurarla in entrambi i modi ed essere pronta a rimanere sorpresa quando le tue intuizioni non corrispondono alla realtà) –