我正在尝试编写一个简单的粒子系统,利用 CUDA 来更新粒子位置。现在我正在定义一个粒子有一个对象,它的位置用三个浮点值定义,速度也用三个浮点值定义。更新粒子时,我在速度的 Y 分量中添加一个常数值以模拟重力,然后将速度添加到当前位置以得出新位置。在内存管理方面,最好维护两个单独的浮点数组来存储数据或以面向对象的方式构建。像这样的东西:
struct Vector
{
float x, y, z;
};
struct Particle
{
Vector position;
Vector velocity;
};
似乎数据的大小与任何一种方法都相同(每个浮点数 4 个字节,每个向量 3 个浮点数,每个粒子 2 个向量,总共 24 个字节)似乎 OO 方法将允许 CPU 和 CPU 之间更有效的数据传输GPU,因为我可以使用单个内存复制语句而不是 2 个(从长远来看更多,因为还有一些其他有关粒子的信息将变得相关,例如年龄、寿命、重量/质量、温度等)然后还有代码的简单可读性和易于处理,这也使我倾向于 OO 方法。但是我看到的例子没有使用结构化数据,所以我想知道是否有原因。
所以问题是哪个更好:单独的数据数组或结构化对象?