2

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

4

1 に答える 1