嵌套的循环CUDA技术 [英] Nested loops to CUDA
本文介绍了嵌套的循环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屋!
查看全文