2011-11-06 12 views
1

私は単純な質問をしました。例えば、推力ベクトルに書いたcudaカーネルを使用したい場合、device_vectorを通常のポインタ型にキャストする必要がありますか?または別の方法がありますか?私はGPUに割り当てられたポインタを持っている場合device_vectorのconstructurに関する推力ベクトル型で普通のCUDAカーネルを作成する

OHと別の事、 は、そのポインタを受け入れるか、私はCPUに最初にすべてをtranferだけにして宣言することになっています迅速なdevice_vectorがあり、私の適切な引数(CPU割り当て変数)を指定したdevice_vector?

ありがとう、igal!

答えて

1

私はスラストベクトルに書いたcudaカーネルを使いたいのですが、device_vectorを通常のポインタ型にキャストする必要がありますか?

  1. あなたはファンクタと一般的なアルゴリズムを使用することができます。

あなたは、2つのオプションがあります。詳細in manual(pp 18-22)。また、私はできますが、非標準のアルゴリズムを持っているか、あなたはすでに カーネルを持っている場合(manualのp。11)raw_pointerにベクトルをキャストするために、よりシンプルになり、近いzip_iterator

  • に見てアドバイス
  • 私はGPUに割り当てられたポインタを持っている場合、あなたはクラスdevice_ptrへのポインタをラップすることができスタンダールアルゴリズムを使用するにはそのポインタ

    を受け付け、迅速device_vectorがあります。次に、device_vectorと同じオブジェクトを使用できます。

    int N = 10; 
    // raw pointer to device memory 
    int * raw_ptr; 
    cudaMalloc((void **) &raw_ptr, N * sizeof(int)); 
    // wrap raw pointer with a device_ptr 
    thrust::device_ptr<int> dev_ptr(raw_ptr); // use device_ptr in thrust algorithms 
    thrust::fill(dev_ptr, dev_ptr + N, (int) 0); // access device memory through device_ptr 
    dev_ptr[0] = 1; 
    // free memory 
    cudaFree(raw_ptr); 
    

    コードmanual p。 12.

    関連する問題