将自定义数据类型与 Thrust Vectors 和 Cuda 一起使用时出现构建错误

build error using Custom data types with Thrust Vectors and Cuda

提问人:Peter Newman 提问时间:11/6/2023 最后编辑:paleonixPeter Newman 更新时间:11/7/2023 访问量:37

问:

我正在将 Thrust 向量用于 cuda 内核,并且我创建了自己的结构,因此我可以将所有数据一起传递,当我初始化自定义类型的主机向量时,我从 thrust 中得到构建错误。

向量的初始化:

host_vector<PhysicsData> physicsDataVector(numPeople + 1, 0);

自定义数据类型:

__device__ __host__ struct PhysicsData {
    vector3 position;
    vector3 velocity;
    vector3 acceleration;
    vector3 force;
    float massInvert = 1.f;
    float drag = 1.f;
    bool dead = false;

    __device__ __host__ PhysicsData(){
        massInvert = 1.f;
        drag = 1.f;
        dead = false;
        position = vector3();
        velocity = vector3();
        acceleration = vector3();
        force = vector3();
    };
};

错误:

Severity    Code    Description Project File    Line    Suppression State
Error   C2664   'void thrust::detail::vector_base<T,Alloc>::fill_init(unsigned __int64,const T &)': cannot convert argument 2 from 'IteratorOrIntegralType' to 'const T &'  DefinitelyNotGodzillaCuda   C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\thrust\detail\vector_base.inl  208
C++ 构造函数 CUDA Thrust

评论

3赞 molbdnilo 11/6/2023
没有从 到 的隐式转换。该问题与 Cuda 或 Thrust 无关。(此外,请查看“输出”窗口而不是“错误列表”以查看整个错误消息。intPhysicsData
0赞 molbdnilo 11/6/2023
旁注:构造函数仅重复默认初始化已完成的工作。
0赞 paleonix 11/6/2023
仅供参考:虽然 Thrust 明确支持使用自定义类型,但由于内存访问速度过长,这种使用会给您带来非常糟糕的性能。为了更好地合并全局内存访问,您需要一个数组结构 (SoA) 数据布局,即 的每个数据成员,甚至可能是 的每个组件的一个向量。另请参阅在 CUDA 类中使用推力处理向量?PhysicsDatavector3

答:

0赞 Peter Newman 11/6/2023 #1

问题是我为向量使用了错误的构造函数,由于某种原因,我的构造函数中有一个,因此将其更改为此修复了它, 0

physicsDataVector(numPeople + 1);