thrust :: device_vector en CUDA [duplicado]
Esta pregunta ya tiene una respuesta aquí:
Empuje dentro de los núcleos escritos por el usuario 4 respuestasSoy nuevo en CUDA y estoy tratando de aprender el uso. Puede ayudarme alguien, por favor. Tengo lo siguiente en la función principal (estoy en Visual Studio y mis archivos de origen y encabezado son .cu y .cuh respectivamente)
thrust::device_vector<float> d_vec(100);
kernel<<<100,1>>>(d_vec);
y luego en el kernel tengo
template <typename T> __global__ kernel(thrust::device_vector<T> d_vec)
{ int tid = threadIdx.x + blockIdx.x*blockDim.x;
T xxx = 3.0;
d_vec[tid] = xxx;
}
mi objetivo es llamar al kernel una vez con float y una vez con double. También tenga en cuenta que en este ejemplo simple tengo la variable xxx (que en mi caso real es algún cálculo que produce números dobles o flotantes).
y obtengo dos errores: 1> llamando a un__host__
función (operador =) de una__global__
a función @ no está permitida 2> llamar a un__host__
función (operador []) de una__global__
a función @ no está permitida
so supongo que "[]" y "=" en "d_vec [tid] = .." es el problema. Pero mi pregunta es cómo accedo al vector del dispositivo dentro de mi kernel. ¿Puede alguien aclarar cuál es el procedimiento correcto y qué estoy haciendo mal? gracias por adelantad