我一直认为分支分歧只是由分支代码引起的,例如“if”、“else”、“for”、“switch”等。但是我最近读了一篇论文,其中说:
" 可以清楚地观察到,在每个第一次基于探索的算法中,线程所采用的发散分支的数量至少比完整探索策略重要两倍。这通常是对全局内存的额外非合并访问的结果。因此,这样的线程分歧导致许多内存访问必须被序列化,从而增加了执行的指令总数。
可以观察到,使用非合并访问的版本的 warp 序列化数量是其对应版本的 7 到 16 倍。实际上,由非合并访问引起的线程分歧会导致许多必须序列化的内存访问,从而增加了要执行的指令。 "
根据作者的说法,似乎未合并的访问会导致分歧的分支。真的吗?我的问题是,分支分歧究竟有多少原因?提前致谢。