我在网站上看到了这个示例内核

 __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];
    }
}

在C中计算此函数
   for(i=0;i<N;i++) {
      y[i] = alpha*x[i] + y[i];
   }

当然内核内的for循环不是必需的吗?您只需执行y[i0] = alpha*x[i0] + y[i0]并完全删除for循环即可。

我只是好奇它为什么存在,目的是什么。这是假设像loop1<<<64,256>>>>这样的内核调用,所以大概是gridDim.x = 1

最佳答案

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

09-08 00:35