使用CUDA流的优势

Aer*_*ics 4 parallel-processing cuda emgucv managed-cuda opencv3.1

我试图了解流在哪里可以帮助我处理视频帧上的多个关注区域。如果使用支持流的NPP功能,是否会出现这样一种情况,即启动与ROI一样多的流?甚至可能为每个Stream创建一个CPU线程?还是使用一个流来处理所有ROI并可能使用来自CPU中多个线程的单个流的好处?

stu*_*hlo 5

在CUDA中,流的使用通常有助于通过两种方式更好地利用GPU。首先,如果复制和执行发生在不同的流中,则内核执行可以重叠主机和设备之间的内存复制。其次,如果GPU上有足够的资源,则运行在不同流中的各个内核可能会重叠。

此外,为每个ROI创建线程是否有帮助取决于GPU与CPU(如果有)利用率的比较。如果CPU上有大量处理,而CPU延迟了GPU计算,那么创建更多线程会有所帮助。

还有更多详细信息(请参阅CUDA的实际版本的文档),这限制了流中操作的重叠。仅当RAM中的内存源或目标被页面锁定时,内存副本才会与内核执行重叠。或者,当主机线程在默认流中发出命令时,流之间就会发生同步。(由于CUDA 7每个线程都有其自己的默认流,因此在不同线程中处理ROI将再次有所帮助。)

因此,如果在不同的流中进行ROI的处理达到一定限制(取决于内核的资源消耗,内存副本的比例和计算等),则满足某些条件,它应该可以提高算法的性能。