【发布时间】:2016-05-24 22:49:32
【问题描述】:
在 CUDA 设备代码中,以下 if-else 语句将导致 warp 线程之间的分歧,从而导致 SIMD 硬件两次通过。假设Vs 是共享内存中的一个位置。
if (threadIdx.x % 2) {
Vs[threadIdx.x] = 0;
} else {
Vs[threadIdx.x] = 1;
}
我相信当我们有一个if 语句时也会有两次通过,没有 else 分支。为什么会这样?
if (threadIdx.x % 2) {
Vs[threadIdx.x] = 0;
}
下面的if 语句会在 3 遍中完成吗?
if (threadIdx.x < 10) {
Vs[threadIdx.x] = 0;
} else if (threadIdx.x < 20) {
Vs[threadIdx.x] = 1;
} else {
Vs[threadIdx.x] = 2;
}
【问题讨论】:
-
@user2023370:然后查看我的编辑。