Распараллелить четыре и более вложенных цикла с помощью 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, поскольку все итерации являются независимыми и могут выполняться одновременно.