嵌套的循环CUDA技术 [英] Nested loops to CUDA

查看:516
本文介绍了嵌套的循环CUDA技术的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将我的C code到CUDA。主要的计算部分包含3嵌套循环:

I want to port my c code to CUDA. The main computational part contains 3 for nested loops:

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

我怎样才能把这一到我的CUDA内核?随着两个for循环,我可以做这样的事情:

How can I translate that to my CUDA kernel? With two for loops I could do something like:

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

但我怎么能这样开始运行得?

But how can I initially this get running?

推荐答案

很多方法可以做到这一点,其中之一是:

Many ways you can do it, One of them is:

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) >>> (...);

这篇关于嵌套的循环CUDA技术的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆