在 C++ 中,为了创建一个包含 10 个整数向量的向量,我将执行以下操作:
std::vector< std::vector<int> > test(10);
因为我认为 Thrust 使用与 STL 相同的逻辑,所以我尝试做同样的事情:
thrust::host_vector< thrust::host_vector<int> > test(10);
但是我遇到了太多令人困惑的错误。我尝试这样做:
thrust::host_vector< thrust::host_vector<int> > test;
它有效,但是我无法向这个向量添加任何内容。正在做
thrust::host_vector<int> temp(3);
test.push_back(temp);
会给我同样的错误(太多而无法将它们粘贴到此处)。
另外,一般来说,在使用 Thrust 时,使用 host_vector
和 STL 的 vector
之间有区别吗?
提前谢谢
最佳答案
Thrust 的容器仅设计用于 POD(普通旧数据)类型。无法通过在推力中实例化“向量的向量”来创建多维向量,主要是因为 GPU 端的限制导致无法在设备代码路径中传递和使用。
C++ 标准库类型和算法与这些 STL 派生模型的推力主机实现之间存在一定程度的兼容性,但是当您想要同时使用主机和设备库后端时,您应该真正坚持使用主机向量。
关于vector - CUDA推力库: How can I create a host_vector of host_vectors of integers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15869049/