Dre*_*dok 6 concurrency cuda overlapping nsight
我试图将内核执行与memcpyasync重叠,但它不起作用.我遵循编程指南中的所有建议,使用固定内存,不同的流等.我看到内核执行确实重叠,但它不与mem传输.我知道我的卡只有一个复制引擎和一个执行引擎,但执行和传输应该重叠,对吧?
似乎"复制引擎"和"执行引擎"总是强制执行我称之为函数的顺序.工作包括执行[HtoD x2,Kernel,DtoH]的4个流.如果我在每个流上发出HtoDx2,Kernel,DtoH系列,我在profiler中看到像stream2 HtoD第一个操作在第一个DtoH操作结束之前不会启动.如果我首先在每个流上发布HtoD,那么第二个HtoD,然后是内核,然后是DtoH(广度),我看不到重叠,并且GPU也强制执行问题顺序.
我已尝试使用CUDA SDK中给出的simpleStreams示例,我也看到了相同的行为.
我附上了一些屏幕截图,显示了VS2008的visual profiler和Nsight中的问题.
PS.我没有设置CUDA_LAUNCH_BLOCKING环境
Simple Streams Visual Profiler
MyApp Nsight时间轴广度优先
MyApp Nsight时间轴深度优先
编辑:
添加额外的x4内核(每个流总共2HtoD,5个内核,1DtoH) - >如果我在运行和不运行-concurrent-kernels-off的情况下运行nvprof,则经过的时间是相同的.如果我设置env CUDA_LAUNCH_BLOCKING = 1那么我看到7.5%的性能提升(来自命令行)!
系统规格:
正如我在评论中所说,CUDA 驱动程序确实存在一个 BUG,它使得流式传输无法与我的设置配合使用。我测试了 1.1 功能卡 (8800 GTS) 和 3.5 功能卡 (GTX Titan),这两张卡都工作正常。某些 Fermi 卡似乎有问题(我的 GTX 480 无法工作)。
归档时间: |
|
查看次数: |
1561 次 |
最近记录: |