如果同一个 warp 内线程执行的操作不一样,GPU 就必须串行化执行所有分支路径.
NCU 指标
Source Page > Avg. Predicated-On Threads Executed
查看 PTX,发现 bra 分支跳转占了很大一部分。
当操作比较简单时,我们可以使用 masking:操作都做,由 mask 来决定是否写入/读取
1 | int index = /* ... */; |
谓词寄存器
setp 设置谓词寄存器,selp 根据谓词寄存器选择
如果同一个 warp 内线程执行的操作不一样,GPU 就必须串行化执行所有分支路径.
NCU 指标
Source Page > Avg. Predicated-On Threads Executed
查看 PTX,发现 bra 分支跳转占了很大一部分。
当操作比较简单时,我们可以使用 masking:操作都做,由 mask 来决定是否写入/读取
1 | int index = /* ... */; |
setp 设置谓词寄存器,selp 根据谓词寄存器选择