CUDA - 这个循环在做什么

use*_*414 5 cuda

嘿,我在网站上看过这个示例内核

 __global__ void loop1( int N, float alpha, float* x, float* y ) {
   int i;
   int i0 = blockIdx.x*blockDim.x + threadIdx.x;

   for(i=i0;i<N;i+=blockDim.x*gridDim.x) {
      y[i] = alpha*x[i] + y[i];
    }
}   
Run Code Online (Sandbox Code Playgroud)

在C中计算此功能

   for(i=0;i<N;i++) {
      y[i] = alpha*x[i] + y[i];
   }
Run Code Online (Sandbox Code Playgroud)

当然内核中的for循环不是必需的吗?你可以y[i0] = alpha*x[i0] + y[i0]完全删除for循环.

我只是好奇为什么它在那里以及它的目的是什么.这假设是内核调用,例如loop1<<<64,256>>>>假设gridDim.x = 1

mog*_*ggi 4

如果向量的条目数多于已启动的线程数,则需要在内核中使用 for 循环。如果可能的话,启动足够多的线程当然会更有效。