我对分支机构的数量有点困惑。
如何计算以下内核中的分支数?
我的设备计算能力为1.2,内核配置为<<<1,32>>>
数据大小是32(我的意思是一个经线。)
如果我没有弄错的话,分支的数量在这里 6 ..但为什么会这样?
__global__ void Kernel(float *c)
{
int tid = blockIdx.x * blockDim.x + threadIdx.x;
float ia, ib;
ia = ib = 0.0f;
if (tid % 2 == 0)
{
ia = 100.0f;
}
else
{
ib = 200.0f;
}
c[tid] = ia + ib;
}
答案 0 :(得分:0)
除非我在这里完全遗漏了某些内容(我很遗憾地承认这很可能),我在这里只看到2个代码分支:if
分支和else
分支。 warp的一半线程将执行if
分支的代码,后半部分将执行else
分支。
确实,由于指令是以锁定步骤解码的,因此这两个分支内的代码不会在单个warp中并行执行。因此,用于执行两个分支的时钟周期的数量将是每个分支的指令数的总和,而不是两个分支的最大值。但这是这里唯一的“伎俩”。