关于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