Question

I am trying to make a vector of cusp::coo_matrix and it seems one cannot use thrust::host_vector in this manner. Consider this code:

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;
}

I get this error message from 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

The interesting thing is I get the exact same errors with cusp::host_memory instead (well, almost the same):

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

So, my question is, is it really a drawback or am I doing something wrong? Any help much appreciated.

In addition, I've tested std::vector instead of thrust::host_vector and it works fine. Not that I am such a big fan of Thrust library, but I'm just curious. Moreover, I will need to rewrite a bit of code in case thrust::host_vector isn't suitable (thrust::find and some other functions are used).

Also, are there any other ways of making an array of cusp matrices? I don't think raw pointers and new/delete is anyhow better than std::vector, am I right?

Was it helpful?

Solution

As identified in comments, the compiler warnings are benign. It is safe to use not POD types in thrust host vectors. It would not be safe to do the same thing with a thrust device vector.

This answer was added as a community wiki from comments to get it off the unanswered list

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top