2017-03-06 2 views
0

推力を使用してhost_vectorの3番目の位置に1つの値を挿入しようとしています。推力を使用してhost_vectorに挿入

static thrust::host_vector <int *> bins; int * p; bins.insert(3, 1, p);

しかし、エラーを取得しています:

error: no instance of overloaded function "thrust::host_vector<T, Alloc>::insert [with T=int *, Alloc=std::allocator<int *>]" matches the argument list argument types are: (int, int, int *) object type is: thrust::host_vector<int *, std::allocator<int *>>

は前にこれを見た誰もがあり、どのように私はこの問題を解決することができますか?私はベクトルを使って情報をGPUに渡したいと思っています。私はもともとベクトルのベクトルを使用して、異なる数のデータを保持する空間セルを表現しようとしましたが、推力では不可能であることを学びました。その代わりに、私は空間セル(最初の3つの値は最初のセルに対応し、次の2つは2番目のセルに、次の0は3番目のセルに対応するかもしれません)でソートされたデータを保持するベクトルbinsを使用しています。 。保持される値はパーティクルへのポインタであり、空間セル内のパーティクルの数を表します(ランタイム前には分かりません)。

+1

st :: host_vector'を 'std :: vector'と組み合わせて使用​​すると、なぜ推力で動作するのか分かりません。最初の引数はイテレータであるはずです。したがって、 'bins.insert(3,1、p);を' bins.insert(bins.begin()+ 3、1、p)に変更すると、コンパイルする必要があります。標準的なベクター挿入物[documentation](http://www.cplusplus.com/reference/vector/vector/insert/)を勉強したいかもしれません。 –

+1

さて、私はあなたが作業するのが難しいポインタのベクトルを見つけるだろうと思いますが、それはあなたが求めている質問ではありません。粒子へのポインタのベクトルではなく、単に粒子のベクトルを使用して、私の助言になるでしょう。 –

答えて

1

コメントで述べたように、thrust::host_vectorstd::vectorに直接モデル化し、使用しようとしている操作を使用すると、コンパイルエラーを取得する理由である位置引数のためイテレータを必要としています。これはそのCが必要であることを

#include <iostream> 
#include <thrust/host_vector.h> 

int main() 
{ 
    thrust::host_vector <int *> bins(10, reinterpret_cast<int *>(0)); 
    int * p = reinterpret_cast<int *>(0xdeadbeef); 
    bins.insert(bins.begin()+3, 1, p); 

    auto it = bins.begin(); 
    for(int i=0; it != bins.end(); ++it, i++) { 
     int* v = *it; 
     std::cout << i << " " << v << std::endl; 
    } 
    return 0; 
} 

注:

http://en.cppreference.com/w/cpp/container/vector/insert https://thrust.github.io/doc/classthrust_1_1host__vector.html#a9bb7c8e26ee8c10c5721b584081ae065

コードの完全な作業例をあなたが示したスニペット次のようになります。あなたが関連文書に相談する場合は、これを見ることができます++ 11の言語機能はnvccで有効になっています(CUDA 8.0を使用)。

~/SO$ nvcc -std=c++11 -arch=sm_52 thrust_insert.cu 
~/SO$ ./a.out 
0 0 
1 0 
2 0 
3 0xdeadbeef 
4 0 
5 0 
6 0 
7 0 
8 0 
9 0 
10 0 
関連する問題