のベクトルを作成しようとしていますが、この方法で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
、そうですか?