Transmitir char * a unsigned int * en CUDA

Tengo un tipo definido comotypedef unsigned char uint40[5] y luego tengo una serie de uint40, digamosuint40* payloads

Estaba intentando portar la siguiente función en un núcleo CUDA

void aSimpleFunction(int M, uint40* data)
{
    for (auto i = 0; i < M; i++)
    {
        unsigned int* dataPtr = (unsigned int*)data[i];
        *dataPtr = 2158677232;
        data[i][4] = 1;
    }
}

Para mí fue tan simple como, pero no funcionó. Sin embargo, el uso de corchetes para acceder a cada uno de los elementos funciona.

__global__ void aSimpleKernel(int M, uint40* data)
{
    int tid = threadIdx.x + 1;

    // DOESN'T WORK
    unsigned int* dataPtr = (unsigned int*)data[tid];
    *dataPtr = 16976944;
    // WORKS
    /*
    data[threadIdx.x][0] = tid * 1;
    data[threadIdx.x][1] = tid * 2;
    data[threadIdx.x][2] = tid * 3;
    data[threadIdx.x][3] = tid * 4;
    */
    data[threadIdx.x][4] = 2;
}

¿Es posible convertir un char * en un int * sin signo en un núcleo CUDA?

Por "no funcionó" quiero decir, tiene números aleatorios en lugar de lo que realmente espero al imprimir cada uno de los elementos de la matriz uint40 *. A veces, la GPU aparentemente falla ya que hay una ventana emergente en Windows que me dice que la GPU se reinició con éxito.

Respuestas a la pregunta(1)

Su respuesta a la pregunta