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

时间:2015-10-28 18:02:38

标签: c++ vector cuda thrust

我有一个向量载体:

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. 如果我无法从该范围获得指针,我是否可以至少为该范围指定一个向量,而不复制实际值?

1 个答案:

答案 0 :(得分:2)

  

我是否可以从该范围获取指针,而无需先将其复制到新的矢量?这似乎浪费了我的复制权。

是的,您可以获得指向该范围的指针。

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

如果我无法从该范围获得指针,我是否可以至少为该范围指定一个向量,而不复制实际值?

不,推力矢量无法实例化&#34;在顶部&#34;现有数据。