質問は次のとおりです。Cudaカーネルでクラス "ベクトル"を使用する方法はありますか?試してみると、次のエラーが表示されます。CUDAデバイスコードでstd :: vectorを使用する
error : calling a host function("std::vector<int, std::allocator<int> > ::push_back") from a __device__/__global__ function not allowed
グローバルセクションにはベクターを使用する方法がありますか? は、私は最近、次のことを試してみました:
- オープンクーダC/C++
- が
- の変化にデバイスへのコード」の値を行く
- は、プロジェクトのプロパティに移動し、新たなクーダプロジェクトを作成しますこの値に設定するには、次の値を設定します。 compute_20、sm_20
.......その後、私のCudaカーネルのprintf標準ライブラリ関数。
カーネルコードでprintfがサポートされている方法で標準ライブラリクラスvector
を使用する方法はありますか?
// this code only to count the 3s in an array using Cuda
//private_count is an array to hold every thread's result separately
__global__ void countKernel(int *a, int length, int* private_count)
{
printf("%d\n",threadIdx.x); //it's print the thread id and it's working
// vector<int> y;
//y.push_back(0); is there a possibility to do this?
unsigned int offset = threadIdx.x * length;
int i = offset;
for(; i < offset + length; i++)
{
if(a[i] == 3)
{
private_count[threadIdx.x]++;
printf("%d ",a[i]);
}
}
}
+1完全に合法的な質問(それが否決された理由がわからない。残念ながら答えはノー現在ある。 – harrism