【发布时间】:2014-10-28 06:20:10
【问题描述】:
在下面的内核中,我使用if 语句来避免超出范围的计算。但如果我理解正确,“if”语句会导致分支发散,从而减慢计算速度——如果我在这里错了,请纠正我。
我的问题:如何在内核中处理超出范围的计算时避免使用 if 语句?
__global__ void vector_add(float *a, float *b, float *c)
{
int index = blockIdx.x * blockDim.x + threadIdx.x;
if(index < N)
c[index] = a[index]*a[index] + b[index]*b[index];
}
//kernel call here
vector_add<<< (N + (THREADS_PER_BLOCK+1)) / THREADS_PER_BLOCK, THREADS_PER_BLOCK >>>( d_a, d_b, d_c );
【问题讨论】:
-
你为什么声称在你的执行路径中有任何分歧分支?带有
index >= N的线程将只是等待或根本不启动,并且不会序列化任何内容,因为您的代码 sn-p 中没有else语句。
标签: cuda