問題是:有沒有辦法在Cuda內核中使用類「vector」?當我嘗試我得到以下錯誤:在CUDA設備代碼中使用std :: vector
error : calling a host function("std::vector<int, std::allocator<int> > ::push_back") from a __device__/__global__ function not allowed
所以有辦法在全球部分使用一個向量? 我最近嘗試以下操作:
- 創建一個新的Cuda項目
- 進入項目的性質
- 開放CUDA C/C++
- 進入設備
- 變化「代碼值代「設置爲這個值: compute_20,sm_20
........之後,我能夠使用我Cuda內核中的printf標準庫函數。
有沒有辦法在內核代碼中支持printf的方式使用標準庫類vector
?這是在內核代碼用printf的例子:
// 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