False dependencies

留着以后备用

是一种在N卡上,哪怕使用了多个stream, 却取不到并行的效果(或者能取到,但有限)。
这在某些N卡和N卡架构,以及驱动版本配合上,常见的。

您在具有计算能力3.5或者更高的Tesla显卡上,不应当能容易观察到这种现象的。
(除非你限定了CUDA_DEVICE_MAX_CONNECTIONS)

这个问题的产生是因为某些N卡的硬件,发现独立无关的并行任务(包括复制传输,包括kernel计算)的能力有限。需要你采用一定的策略才能尽量让它们充分利用。
常见的手册上有两种:一种是广度优先,一种是深度优先(其实这两种名字无所谓的)。
例如对于这么一个kernel场景:
复制到设备->启动kernel->回传

如果在多个流中同时执行这个场景,有多种方式,
(1)对每个流,先都压入1个传输任务。继续循环,对每个流,再压入kernel。再继续循环,再对每个流,压入回传传输。
(2)而第二种方式,则可以:对每个流,执行进行复制到设备, 启动kernel,回传。然后对下个流继续这样循环。

其中第一种叫广度优先。第二种叫深度有限。(其实其他的各种组合方式)

在不同的卡上,可以观察到这两种方式具有不同的效果。

为何会这样,长期以来一直是个谜,直到Kepler时代,NV公布了技术细节。

因为它们虽然支持多流,但只有1个硬件队列,所有的流根据创建顺序的不同,按照不同的规则都映射到这一个硬件队列上。此在此单个硬件队列内,GPU发现可并行无关的任务的能力有限。此时导致的不能有效的并行的
现象,被称为假依赖(或者假串行)。

只要您手中具有一张具有Hyper-Q技术的卡(您已经有了,从您之前的帖子中可以看到的),它们具有多个队列,只要您不特意限定CUDA_DEVICE_MAX_CONNECTIONS为很小的数。您应当不容易观察到现象的。
因此您可以忘记它。

转载于http://bbs.gpuworld.cn/forum.php?mod=viewthread&tid=10233&extra=page%3D1 gpu世界论坛

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值