Cuda推力::device_vector从特定范围获取指针

Cuda thrust::device_vector get pointer from specific range

本文关键字:范围 获取 指针 vector 推力 device Cuda      更新时间:2023-10-16

我有一个向量的向量:

thrust::device_vector weights_;

这是连续量的存储器,其中每个w项,表示矢量。

在我的一个函数中,我将该范围的开始和结束作为参数传递,如下所示:

 __host__ ann::d_vector ann::prop_layer (
                                           unsigned int weights_begin,
                                           unsigned int weights_end,
                                           ann::d_vector & input
                                        ) const

然后,我去复制到一个新的向量中,这个范围,然后得到一个可以在内核中使用的原始指针:

thrust::device_vector<float> weights ( weights_.begin() + weights_begin,
                                       weights_.begin() + weights_end );
float * weight_ptr = thrust::raw_pointer_cast( weights.data() );
some_kernel<<<numBlocks,numThreads>>>( weight_ptr, weight.size() );
  1. 我可以在不首先将指针复制到新向量的情况下从该范围中获取指针吗?对我来说,这似乎是一种浪费
  2. 如果我无法从该范围中获取指针,我至少可以在不复制实际值的情况下为该范围分配一个向量吗

我可以在不首先将指针复制到新向量的情况下从该范围中获取指针吗?对我来说,这似乎是一种浪费。

是的,你可以得到一个指向该范围的指针。

float * weight_ptr = thrust::raw_pointer_cast( weights_.data() ) + weights_begin;

如果我无法从该范围中获取指针,我至少可以在不复制实际值的情况下为该范围分配一个向量吗?

不,推力矢量不能在现有数据之上实例化。