嘿
我在网站上看到了这个示例内核
__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循环。如果可能的话,启动足够的线程当然更有效。