Невозможно создать thrust :: host_vector из cusp :: coo_matrix в device_memory?

Я пытаюсь сделать вектор из 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, я прав?

2

Решение

Как указано в комментариях, предупреждения компилятора являются доброкачественными. Безопасно использовать не POD-типы в векторах хоста тяги. Было бы небезопасно делать то же самое с вектором тяги.

Этот ответ был добавлен в виде сообщества вики из комментариев, чтобы получить его из списка без ответа

1

Другие решения

Других решений пока нет …