LZ您好:
1:按warp对齐的if分支,并不会有很大的影响,而warp内部分支则是需要注意避免的。
2:前面36#的示例是对35#描述情况的补充,35#中说了,需要有足够多组数据用于处理,此时一个block即便处理多组,也还有足够多的blocks供使用。也就是说,有足够多的threads/blocks即可,并不需要非常非常多。一般而言,适度增加一个线程的工作量是有好处的。
请您不要将36#的例子理解为一共只有那么多数据,如果那样只有5组数据的话,开5个blocks一般要比开一个block快一些,因为一个block只能用一个SM,而一般GPU都有多个SM。
至于36#例子是串行的理解,它计算每一组数据的时候是并行的,那么5组数据顺序完成并不影响效率的。以及,如果每次计算比较简单,那么也完全可以把5次计算展开写到一起(或者编译器会自动考虑展开)。
总之,实现方法是不唯一的。
大致如此,祝您编码顺利~