1

次のベクトルがあります。

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_castthrust::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

私の元の質問を完全に誤解を招くようにします。

4

1 に答える 1

2

コードでこのレベルの複雑さが必要な理由がわかりません。ここに投稿した例を見ましたか?

とにかく、このコード行:

   thrust::host_vector<float, thrust::cuda::experimental::pinned_allocator<float> > *hh = new thrust::host_vector<float, thrust::cuda::experimental::pinned_allocator<float> >(DATA_SIZE);

vector へのポインタを作成します。それはベクトルと同じではありません。

次のような構成を使用します。

member = hh[1];

ベクトルへのポインタである場合hhは、ベクトル内の要素にアクセスしようとする有効な方法ではありません。これは、ベクトルの配列にインデックスを付ける有効な方法ですが、これはあなたがしようとしていることではありません。

一方、これを行う場合:

member = (*hh)[1];

コンパイルエラーはなくなると思います。それは私のために行います。

これは CUDA や推力の問題ではないと思います。であなたのアプローチを試みると、同様の問題に遭遇しますstd::vector。また、元の質問のどこにも、それh_vectorがベクトルへのポインターであることを示しておらず、表示したコード行はそのように作成していないことに注意してください。したがって、編集/プロトタイプ コードは、元の説明とは著しく異なります。

于 2013-09-25T06:36:45.523 に答える