Estoy intentando escribir un sistema de partículas simple que aprovecha CUDA para actualizar las posiciones de las partículas. En este momento estoy definiendo que una partícula tiene un objeto con una posición definida con tres valores de flotación, y una velocidad también definida con tres valores de flotación. Al actualizar las partículas, agrego un valor constante a la componente Y de la velocidad para simular la gravedad, luego sumar la velocidad a la posición actual para obtener la nueva posición. En términos de gestión de memoria, es mejor mantener dos matrices separadas de flotadores para almacenar los datos o estructurarlos de forma orientada a objetos. Algo como esto:Cómo estructurar datos para velocidad óptima en una aplicación CUDA
struct Vector
{
float x, y, z;
};
struct Particle
{
Vector position;
Vector velocity;
};
Parece que el tamaño de los datos es el mismo con cualquiera de los métodos (4 bytes por flotador, 3 flotadores por Vector, 2 vectores por partícula total de 24 bytes en total) Parece que el OO El enfoque permitiría una transferencia de datos más eficiente entre la CPU y la GPU porque podría usar una sola declaración de copia de memoria en lugar de 2 (y a la larga más, ya que hay algunos otros bits de información sobre partículas que serán relevantes, como Age , Lifetime, Weight/Mass, Temperature, etc.) Y también existe la simple legibilidad del código y la facilidad de manejo que también me inclina hacia el enfoque OO. Pero los ejemplos que he visto no utilizan datos estructurados, por lo que me pregunto si hay alguna razón.
Entonces, la pregunta es ¿qué es mejor: matrices individuales de datos u objetos estructurados?
Err .. ¿por qué no intentarlo y descubrirlo? –
Lol. Como estoy interesado en la teoría, incluso si encuentro que una funciona mejor que la otra, aún quiero saber por qué. –