使用CUDA流的优势

8

我正在尝试理解在视频帧上处理多个感兴趣区域时流可能对我有何帮助。如果使用支持流的NPP函数,是否应该启动与ROI数量相同的多个流?甚至为每个流创建一个CPU线程?或者,使用一个流来处理所有ROI,并且可能从CPU的多个线程中使用此单个流会更有益呢?

1个回答

9
在CUDA中,使用流通常有两种方式更好地利用GPU。首先,如果复制和执行发生在不同的流中,则主机和设备之间的内存复制可以通过内核执行进行重叠。其次,运行在不同流中的单个内核可以重叠,如果GPU上有足够的资源。此外,创建每个ROI的线程是否有帮助取决于GPU与CPU(如果有)利用率的比较。如果CPU上有很多处理并且CPU阻止了GPU计算,则创建更多线程有所帮助。还有进一步的细节(请参见CUDA实际版本的文档),这些细节限制了在流中操作的重叠。仅当RAM中的内存源或目标是页面锁定时,内存复制才会与内核执行重叠。或者,在主机线程在默认流中发出命令时,流之间的同步会发生。(自CUDA 7以来,每个线程都有自己的默认流,因此在不同的线程中处理ROIs将再次有所帮助。)因此,满足某些条件的情况下,如果ROI的处理发生在不同的流中,应该可以提高算法的性能,直到达到一定的限制(取决于内核的资源消耗、内存复制和计算的比例等)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接