Sto tentando di scrivere un semplice sistema di particelle che si avvale di CUDA per eseguire l'aggiornamento delle posizioni delle particelle. In questo momento sto definendo una particella con un oggetto con una posizione definita con tre valori float e una velocità definita anche con tre valori float. Quando aggiorno le particelle, aggiungo un valore costante alla componente Y della velocità per simulare la gravità, quindi aggiungo la velocità alla posizione corrente per ottenere la nuova posizione. In termini di gestione della memoria è meglio mantenere due matrici separate di float per archiviare i dati o strutturarli in modo orientato agli oggetti. Qualcosa di simile:Come strutturare i dati per la velocità ottimale in un'app CUDA
struct Vector
{
float x, y, z;
};
struct Particle
{
Vector position;
Vector velocity;
};
Sembra che la dimensione dei dati è lo stesso con uno dei due metodi (4 byte per galleggiante, 3 galleggianti per Vector, 2 vettori per particella totale di 24 byte totale) Sembra che il OO l'approccio consentirebbe un trasferimento di dati più efficiente tra CPU e GPU perché potrei usare una singola istruzione di copia di memoria invece di 2 (e nel lungo termine di più, poiché ci sono alcune altre informazioni sulle particelle che diventeranno rilevanti, come Age , Vita, Peso/Massa, Temperatura, ecc.) E poi c'è anche solo la semplice leggibilità del codice e la facilità con cui ci si confronta che mi rende anche incline all'approccio OO. Ma gli esempi che ho visto non utilizzano dati strutturati, quindi mi chiedo se c'è un motivo.
Quindi la domanda è: meglio un singolo array di dati o oggetti strutturati?
Err .. perché non provare e scoprire? –
Lol. Perché sono interessato alla teoria, anche se trovo che uno funzioni meglio dell'altro, voglio ancora sapere perché. –