【发布时间】:2013-09-30 09:22:49
【问题描述】:
我一直认为分支分歧只是由分支代码引起的,例如“if”,“else”,“for”,“switch”等。但是我最近读了一篇论文,其中说:
" 可以清楚地观察到,每个第一次基于探索的算法中线程所采用的发散分支的数量至少比完整探索策略重要两倍。 这通常是对全局内存的额外非合并访问的结果。因此,这种线程分歧导致许多内存访问必须被序列化,从而增加了执行的指令总数。 em>
可以观察到,对于使用非合并访问的版本,warp 序列化的数量是其对应版本的 7 到 16 倍。事实上,由非合并访问引起的线程分歧会导致许多内存访问必须被序列化,从而增加了要执行的指令。 "
根据作者的说法,似乎未合并的访问会导致分歧的分支。真的吗? 我的问题是,分支分歧究竟有多少原因? 提前致谢。
【问题讨论】:
-
你能链接到原始参考吗?
-
+1 我真的很想知道内存访问策略如何负责发散分支。请添加参考。
-
这篇论文应该是参考。这两个段落分别来自 p80 和 p107。 mistic.heig-vd.ch/luong/thesis.pdf
-
很抱歉没有提供参考。非常感谢 Eric 为我做这件事。