Cuda线程和循环

时间:2012-11-20 09:48:38

标签: cuda

我有一些我不了解CUDA的东西。我知道有'虚拟'变量称为线程。

编程内核时,线程变量自动运行,内核为每个线程反复运行。 (到目前为止?)

现在,如果我按照这样的方式编程:

for (int i = 0 ; i<100; i++){
....
}

每个线程都反复运行吗?或者只是一次?

1 个答案:

答案 0 :(得分:5)

您放入内核函数的每个代码(以__global__为前缀)都将由所有并发线程执行(在内核启动时指定了大量线程)。在内核主体中,您可以根据其全局标识符或本地标识符来区分线程的计算:

表示1D(可能是您的情况):

本地标识符:int tid = threadIdx.x

全球标识符:int tid = blockIdx.x*blockDim.x + threadIdx.x

进一步澄清:

如果你有这个内核:

    __global__ void dummy(int *out){
      for(int i=0; i<100; i++){
        ...
      }
    }

并且您想要启动4096个并发线程,您应该将线程组织成线程块(以利用局部性并解决硬件限制)。如果将4096个线程分成256个线程的线程块,则可以运行此大量线程来执行dummy函数:

dummy<<<4096/256, 256>>>(output_array);

dummy函数将由4096个线程执行,每个线程一个,串行或并行,具体取决于硬件(真实GPU)。您应该假设所有线程并行运行。您可以使用线程标识符(全局)区分线程计算,如上所述。