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

标签 c++ vector cuda thrust

我有一个 vector 的 vector :

thrust::device_vector weights_;

这是一个连续的内存量,其中每 w 个项目, 表示一个 vector 。

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

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

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

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. 我能否从该范围获取指针,而无需先将其复制到新 vector ?对我来说,这似乎是对复制重新分配的浪费。
  2. 如果我无法从该范围获取指针,我是否可以至少为该范围分配一个 vector ,而不复制实际值?

最佳答案

Can I get a pointer from that range, without first copying it to a new vector? That seems like a waste of copy-realloc to me.

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

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

In case I can't get a pointer from that range, can I at least assign a vector to that range, without copying the actual values?

不,不能在现有数据的“顶部”实例化推力 vector 。

关于c++ - Cuda thrust::device_vector 从特定范围获取指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33398374/

相关文章:

c++ - 简单的客户端/服务器在传输中丢失线路 (boost/Windows)

c++ - 将 const void* 指针转换为特定类指针

C++ 错误 : no viable conversion from returned value of type

c++ - 迭代器返回垃圾

c++ - CUDA:如何在设备上填充动态大小的 vector 并将其内容返回给另一个设备功能?

C++11 typelist unroller 和静态函数的代理调用者

c++ - 在 for 循环中打印时,C++ 卡片 vector 中的某些信息未打印出来?

arrays - Fortran:将可分配向量组合在数组中,无需复制和 reshape

parallel-processing - SM(流式多处理器)、事件 block 和事件扭曲在 GPU 中如何表现?

c++ - 在一个 C++ 程序中有不同的新运算符 : How to? 坏主意?