2

我正在尝试制作一个向量,cusp::coo_matrix但似乎无法thrust::host_vector以这种方式使用。考虑这段代码:

int main(void)
{
    typedef typename cusp::coo_matrix<int, float, cusp::device_memory> maintype;
    maintype B;
    thrust::host_vector<maintype> h_vec(2,B);
    return 0;
}

我从以下位置收到此错误消息nvcc

Warning: calling a __host__ function("thrust::detail::vector_base<int, thrust::device_malloc_allocator<int> > ::vector_base") from a __host__ __device__ function("thrust::detail::vector_base<int, thrust::device_malloc_allocator<int> > ::vector_base [subobject]") is not allowed

Warning: calling a __host__ function("thrust::detail::vector_base<float, thrust::device_malloc_allocator<float> > ::vector_base") from a __host__ __device__ function("thrust::detail::vector_base<float, thrust::device_malloc_allocator<float> > ::vector_base [subobject]") is not allowed

有趣的是,我得到了完全相同的错误cusp::host_memory(嗯,几乎相同):

Warning: calling a __host__ function("thrust::detail::vector_base<int, std::allocator<int> > ::vector_base") from a __host__ __device__ function("thrust::detail::vector_base<int, std::allocator<int> > ::vector_base [subobject]") is not allowed

Warning: calling a __host__ function("thrust::detail::vector_base<float, std::allocator<float> > ::vector_base") from a __host__ __device__ function("thrust::detail::vector_base<float, std::allocator<float> > ::vector_base [subobject]") is not allowed

所以,我的问题是,这真的是一个缺点还是我做错了什么?非常感谢任何帮助。

另外,我已经测试了,std::vector而不是thrust::host_vector它工作正常。并不是说我是 Thrust 库的忠实粉丝,但我只是好奇。此外,我需要重写一些代码以防thrust::host_vector不合适(thrust::find并且使用了一些其他功能)。

另外,还有其他制作尖点矩阵数组的方法吗?我不认为原始指针new/delete比 更好std::vector,对吗?

4

1 回答 1

1

如评论中所述,编译器警告是良性的。在推力宿主向量中使用非 POD 类型是安全的。用推力装置矢量做同样的事情是不安全的。

此答案已从评论中添加为社区 wiki,以将其从未答复列表中删除

于 2014-05-04T07:00:03.560 回答