控制流程(分支数量)

时间:2015-11-07 14:53:12

标签: cuda

我对分支机构的数量有点困惑。

如何计算以下内核中的分支数?

我的设备计算能力为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;
}

1 个答案:

答案 0 :(得分:0)

除非我在这里完全遗漏了某些内容(我很遗憾地承认这很可能),我在这里只看到2个代码分支:if分支和else分支。 warp的一半线程将执行if分支的代码,后半部分将执行else分支。

确实,由于指令是以锁定步骤解码的,因此这两个分支内的代码不会在单个warp中并行执行。因此,用于执行两个分支的时钟周期的数量将是每个分支的指令数的总和,而不是两个分支的最大值。但这是这里唯一的“伎俩”。