用户
 找回密码
 立即注册
jaredlu_CUDA 该用户已被删除
发表于 2013-9-11 15:20:57
73776
关于profiler中的Divergent Branches,查了帮助手册,还是没看出个究竟。
这是profiler的分析结果的截图:

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
使用道具 举报 回复
发表于 2013-9-11 16:28:21
楼主您好:

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

特此澄清。
使用道具 举报 回复 支持 反对
发表于 2013-9-11 16:51:10
横扫千军 发表于 2013-9-11 16:28
楼主您好:

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


嗯,谢谢版主!
那么Divergence =100%,是指?
使用道具 举报 回复 支持 反对
发表于 2013-9-11 17:07:55
jaredlu_CUDA 发表于 2013-9-11 16:51
嗯,谢谢版主!
那么Divergence =100%,是指?

楼主您好,

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

这一般需要修正,但例如一些规约类的代码,可能故意如此,就无需修正了。
请参考您的实际要求做出是否要修改的决心。
使用道具 举报 回复 支持 反对
发表于 2013-9-11 17:13:51
这分支就严重了,估计现在程序的瓶颈就在warp分支上了,但大部分的if语句,都是归约部分的,看来是不能避免的。谢谢版主的悉心指导!
使用道具 举报 回复 支持 反对
发表于 2013-9-11 17:18:29
jaredlu_CUDA 发表于 2013-9-11 17:13
这分支就严重了,估计现在程序的瓶颈就在warp分支上了,但大部分的if语句,都是归约部分的,看来是不 ...

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

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

我的意思只是说当一个定型无法避免的时候,才无可修改,您觉得呢?
使用道具 举报 回复 支持 反对
发表于 2013-9-11 17:24:50
是的,版主,算法还是可以改进的!需要比较一下,到底哪个更快些!
非常感谢版主耐心解答!
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册