Вложенные циклы в CUDA - PullRequest
2 голосов
/ 25 июня 2011

Я хочу перенести мой код на CUDA.Основная вычислительная часть содержит 3 для вложенных циклов:

for (int i=0; i< Nx;i++){
  for (int j=0;j<Ncontains[i];j++){
    for (int k=0;k< totalVoxels;k++){
          .......
   }
  }
}

Как я могу перевести это в мое ядро ​​CUDA?С двумя циклами for я мог бы сделать что-то вроде:

int n= blockIdy.y * blockDim.y + threadIdx.y;
int i= blockIdx.x * blockDim.x + threadIdx.x;

Но как мне изначально это запустить?

1 Ответ

3 голосов
/ 25 июня 2011

Есть много способов сделать это. Один из них:

for (int i=blockIdx.x; i< Nx; i += gridDim.x){
  for (int j=threadIdx.y; j<Ncontains[i]; j+= blockDim.y){
    for (int k=threadIdx.x; k< totalVoxels; k += blockDim.x){
          .......
   }
  }
}

Выше вы бы назвали:

// nx,ny block dimensions
kernel <<< dim3(nBlocks), dim3(nx, ny) >>> (...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...