1.warp divergence
当一个 warp 中的线程遇到条件分支走不同的分支时,因为硬件一次只能发生相同的指令,所以必须串行执行。
2.处理 warp divergence
分支条件按照 warp 对齐;用算术运算代替条件指令;循环统一退出条件;数据重排
3.为什么需要 warp shuffle
避免消耗昂贵的共享内存,避免 syncthread 同步
4.寄存器交换
__shfl_sync 参数分别是参与线程、提供的值,获取线程的编号
总结 除了 warp divergence 还有 bank conflict 性能问题,一个是硬件层面指令发射,一个是共享内存层面的问题,有不同的解决方法,然后寄存器通信可以避免共享内存使用,有很多好处,寄存器更快。
bank conflict 也会把并行变串行因为不能同时访问一个 bank 的不同地址,warp divergence 是因为不能在硬件对同一个线程束线程发布不同指令。