2015-11-07 57 views
-2

我对分支数量有点困惑。控制流程(分支数)

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

我的设备计算能力是1.2,内核配置是<<<1,32>>>
数据大小是32(我的意思是一个warp。)。
分支数量在这里如果我没有弄错..但为什么呢?

__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

这将帮助我们清除你错误的地方,如果你要提供你如何到达数字6. –

+0

嗯,那里有6个括号。也许就是这样? – Jez

+0

@RogerDahl我不认为我出错了!你有没有检查过它的结果? – samil

回答

0

除非有一些东西我在这里完全不知道(我遗憾的是必须承认是完全有可能的),我只看到2个代码分支在这里:在if分支和else之一。一半的warp线程将执行if分支的代码,第二个将执行else分支。

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