La pregunta es: ¿hay alguna manera de usar el "vector" de clase en los kernels Cuda? Cuando lo intento, aparece el siguiente error:Usando std :: vector en el código del dispositivo CUDA
error : calling a host function("std::vector<int, std::allocator<int> > ::push_back") from a __device__/__global__ function not allowed
¿Hay una forma de usar un vector en la sección global? Recientemente he intentado lo siguiente:
- crear un nuevo proyecto Cuda
- ir a las características del proyecto
- abierta Cuda C/C++
- ir a dispositivo
- cambiar el valor en "Código Generación "para establecerse en este valor: compute_20, sm_20
........ después de eso, pude usar el printf función de biblioteca estándar en mi kernel Cuda.
¿hay alguna manera de utilizar la clase de biblioteca estándar vector
en la forma en que printf es compatible con el código kernel? Este es un ejemplo del uso de printf en el código 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 pregunta perfectamente legítima (no estoy seguro por qué fue rechazada. Por desgracia, la respuesta es actualmente ninguna. – harrism