Paralelize quatro e mais loops aninhados com CUDA

Eu estou trabalhando em um compilador gerando código C ++ paralelo. Eu sou novo na programação CUDA, mas estou tentando paralelizar o código C ++ com o CUDA.

Atualmente, se eu tiver o seguinte código C ++ seqüencial:

for(int i = 0; i < a; i++) {
    for(int j = 0; j < b; j++) {
        for(int k = 0; k < c; k++) {
            A[i*y*z + j*z + k*z +l] = 1;
        }
    }
}

e isso resulta no seguinte código CUDA:

__global__ void kernelExample() {
    int _cu_x = ((blockIdx.x*blockDim.x)+threadIdx.x);
    int _cu_y = ((blockIdx.y*blockDim.y)+threadIdx.y);
    int _cu_z = ((blockIdx.z*blockDim.z)+threadIdx.z);

    A[_cu_x*y*z + _cu_y*z + _cu_z] = 1;
}

para que cada ninho de loop seja mapeado para uma dimensão, mas qual seria a maneira correta de paralelizar quatro e mais loops aninhados:

for(int i = 0; i < a; i++) {
    for(int j = 0; j < b; j++) {
        for(int k = 0; k < c; k++) {
            for(int l = 0; l < d; l++) {
                A[i*x*y*z + j*y*z + k*z +l] = 1;
            }
        }
    }
}

Existe alguma maneira semelhante? Digno de nota: todas as dimensões de loop são paralelas e não há dependências entre iterações.

Desde já, obrigado!

EDIT: o objetivo é mapear todas as iterações para threads CUDA, uma vez que todas as iterações são independentes e podem ser executadas simultaneamente.

questionAnswers(1)

yourAnswerToTheQuestion