关于profiler中的Divergent Branches问题

关于profiler中的Divergent Branches,查了帮助手册,还是没看出个究竟。

这是profiler的分析结果的截图:

[attach]3388[/attach]

底下的Divergent Branches,是否是指warp分歧?
Line:19 所对应的的代码为下图中的if语句:

[attach]3389[/attach]

上图中的if语句会引起warp分歧吗?

下面是归约求和的代码(每个block有32个thread),这里的if语句会引起warp分歧吗?

[attach]3387[/attach]

楼主您好:

divergent branch, 是指的warp内部的分支。而不算其他类型的分支(例如warp间的或者__syncthreads()之类的)

特此澄清。

[

嗯,谢谢版主!
那么Divergence =100%,是指?

楼主您好,

这里是profiler给出的某行会导致divergent branch的代码处,在N次执行中,每次都要分支。

这一般需要修正,但例如一些规约类的代码,可能故意如此,就无需修正了。
请参考您的实际要求做出是否要修改的决心。

:funk:这分支就严重了,估计现在程序的瓶颈就在warp分支上了,但大部分的if语句,都是归约部分的,看来是不能避免的。谢谢版主的悉心指导!

您的算法还是可以改进的。

我的话并不代表你用过规约您的算法就定死了,写死了,您依然可以考虑改善的,甚至可以改成不需要规约的等等。

我的意思只是说当一个定型无法避免的时候,才无可修改,您觉得呢?

是的,版主,算法还是可以改进的!需要比较一下,到底哪个更快些!
非常感谢版主耐心解答!:lol