如果同一个 warp 内线程执行的操作不一样,GPU 就必须串行化执行所有分支路径.

NCU 指标

Source Page > Avg. Predicated-On Threads Executed

查看 PTX,发现 bra 分支跳转占了很大一部分。

当操作比较简单时,我们可以使用 masking:操作都做,由 mask 来决定是否写入/读取

1
2
3
4
int index = /* ... */;
int mask = input[index] < 0.0f ? 0xFFFFFFFF : 0x00000000;
float mul = input[index] * 2;
float div = ;

谓词寄存器

setp 设置谓词寄存器,selp 根据谓词寄存器选择