Cuda 控制流(分支数)

Cuda 控制流(分支数),cuda,Cuda,我对分支的数量有点困惑 如何计算以下内核中的分支数 我的设备计算能力是1.2,内核配置是 数据大小为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 =

我对分支的数量有点困惑

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

我的设备计算能力是1.2,内核配置是

数据大小为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;
}

除非我在这里完全错过了什么(我必须承认这很可能),否则我在这里只看到两个代码分支:if分支和else分支。warp的一半线程将执行
if
分支的代码,另一半线程将执行
else
分支


诚然,由于指令是以锁定步骤解码的,因此这两个分支中的代码不会在单个扭曲内并行执行。因此,执行两个分支的时钟周期数将是每个分支的指令数之和,而不是两个分支的最大值。但这是这里唯一的“诀窍”。

如果你提供你是如何得出数字6的,这将有助于我们澄清你的错误所在。嗯,这里有6个大括号。也许就是这样?@RogerDahl我不认为我错了!你有没有检查过它是罗尔斯的?