次のベクトルがあります。
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] タイプはであるため、float データを使用して取得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;
}
EDIT 2 :実際にベクトルを次のように使用しました:
thrust::host_vector< T , thrust::cuda::experimental::pinned_allocator< T > > *h_vector
私の元の質問を完全に誤解を招くようにします。