请问下各位:profiler 中有很多分析指标,其中branch是什么意思?我觉得不是if,switch等条件分支的数量,
因为即使我的kernel里面没有一个条件语句,也会出现branch不为零的情况。那一个kernel中的branch数目到底是怎么计算出来的呢?
我想弄懂了这个问题,对于优化应该很有用,谢谢大家指导、讨论
[
楼主您好,没有if语句但是结果出现很多branch很正常。
(1)因为根据profiler手册的说法,__syncThreads()之类的语句同样会被当作branch来统计的。
(2)即使是这种,
if(threadIdx.x<12345)
{
//…
}
在一个warp内肯定执行的语句,也会被记做branch的(但不会被记做divergent branch).
如果是这些情况,我想,它对您的优化就应该没啥指导作用了。
正因为这些方面导致的branch在优化方面基本没有太大的指导作用,所以我建议您完全不用考虑它。相反,divergent branch统计,这个计数不会考虑barrier指令,同时也只对一个warp内实际产生不同的执行分支才会计数。所以我建议您根据divergent branch统计数据来进行您的代码优化。
:right: