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?
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