用户
 找回密码
 立即注册
发表于 2013-11-5 14:32:56
翊君 发表于 2013-11-5 11:41
是的,我一直认为if语句是串行的,因为我以前写过这样的程序,发现时间反而变长了。您这里用FOR语句难道 ...

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次计算展开写到一起(或者编译器会自动考虑展开)。

总之,实现方法是不唯一的。

大致如此,祝您编码顺利~
使用道具 举报 回复 支持 反对
发表于 2013-11-17 15:03:58
感谢ice版主的细心答复,思路一下清晰了很多
使用道具 举报 回复 支持 反对
12345
发新帖
您需要登录后才可以回帖 登录 | 立即注册