La domanda è: esiste un modo per utilizzare il vettore di classe nei kernel Cuda? Quando provo ottengo il seguente errore:Uso di std :: vector nel codice dispositivo CUDA
error : calling a host function("std::vector<int, std::allocator<int> > ::push_back") from a __device__/__global__ function not allowed
Quindi c'è un modo per utilizzare un vettore nella sezione globale? Recentemente ho provato la seguente:
- creare un nuovo progetto Cuda
- andare alle proprietà del progetto
- aperto Cuda C/C++
- andare al dispositivo
- variazione del valore in "Codice Generazione "da impostare su questo valore: compute_20, sm_20
........ dopo che sono stato in grado di utilizzare il funzione di libreria standard di printf nel mio kernel Cuda.
esiste un modo per utilizzare la classe di libreria standard vector
nel modo in cui printf è supportato nel codice del kernel? Questo è un esempio di utilizzo di printf nel codice del kernel:
// 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 domanda perfettamente legittima (non so perché è stato bocciato. Purtroppo la risposta è attualmente. – harrism