thrust :: device_vector en CUDA [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Empuje dentro de los núcleos escritos por el usuario 4 respuestas

Soy 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

Respuestas a la pregunta(1)

Su respuesta a la pregunta