Я пытаюсь сделать вектор из 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
, я прав?
Как указано в комментариях, предупреждения компилятора являются доброкачественными. Безопасно использовать не POD-типы в векторах хоста тяги. Было бы небезопасно делать то же самое с вектором тяги.
Этот ответ был добавлен в виде сообщества вики из комментариев, чтобы получить его из списка без ответа
Других решений пока нет …