Распараллелить четыре и более вложенных цикла с помощью CUDA

Я работаю над компилятором, генерирующим параллельный код C ++. Я новичок в программировании CUDA, но я пытаюсь распараллелить код C ++ с CUDA.

В настоящее время, если у меня есть следующий последовательный код C ++:

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;
        }
    }
}

и это приводит к следующему коду 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;
}

поэтому каждое гнездо цикла отображается в одном измерении, но как правильно распараллелить четыре и более вложенных цикла:

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;
            }
        }
    }
}

Есть ли подобный способ? Примечательно: все измерения цикла параллельны, и между итерациями нет никаких зависимостей.

Заранее спасибо!

РЕДАКТИРОВАТЬ: цель состоит в том, чтобы отобразить все итерации в потоки CUDA, поскольку все итерации являются независимыми и могут выполняться одновременно.

Ответы на вопрос(1)

Ваш ответ на вопрос