我有以下向量:
thrust::host_vector< T , thrust::cuda::experimental::pinned_allocator< T > > h_vector
在我目前的情况下,其中 T 的类型为float
。我想从推力的角度以正确的方式访问第 i 个元素。
天真的方法是:
float el = h_vector[i];
这导致了以下错误:
../src/gpu.cuh(134): error: a reference of type "float &" (not const-qualified) cannot be initialized with a value of type "thrust::host_vector<float, thrust::system::cuda::experimental::pinned_allocator<float>>"
显然, h_array[i] 类型是reference
,所以我继续尝试使用thrust::raw_refence_cast
和thrust::pointer
检索我的浮点数据无济于事。
最后,我想出了:
float *raw = thrust::raw_pointer_cast(h_array->data());
float el = raw[i];
有没有更好的方法来实现这一点?
编辑:原型代码
#include <thrust/host_vector.h>
#include <thrust/system/cuda/experimental/pinned_allocator.h>
static const int DATA_SIZE = 1024;
int main()
{
thrust::host_vector<float, thrust::cuda::experimental::pinned_allocator<float> > *hh = new thrust::host_vector<float, thrust::cuda::experimental::pinned_allocator<float> >(DATA_SIZE);
float member, *fptr;
int i;
// member = hh[1]; //fails
fptr = thrust::raw_pointer_cast(hh->data()); //works
member = fptr[1];
return 0;
}
编辑2:我实际上使用了这个向量:
thrust::host_vector< T , thrust::cuda::experimental::pinned_allocator< T > > *h_vector
使我原来的问题完全具有误导性。