Cuda 控制流(分支数)
我对分支的数量有点困惑 如何计算以下内核中的分支数 我的设备计算能力是1.2,内核配置是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 =
数据大小为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我不认为我错了!你有没有检查过它是罗尔斯的?