我试图了解Stream可以帮助我处理视频帧上的多个感兴趣区域。如果使用支持流的NPP功能,是否会启动与ROI一样多的流?甚至可能为每个Stream创建一个CPU线程?或者使用一个流来处理所有ROI以及可能使用来自CPU中多个线程的这个单一流的好处是什么?
答案 0 :(得分:4)
在CUDA中,使用流通常有助于以两种方式更好地利用GPU。首先,如果在不同的流中进行复制和执行,则主机和设备之间的存储器副本可以由内核执行重叠。其次,如果GPU上有足够的资源,则在不同流中运行的各个内核可能会重叠。
此外,是否为每个ROI创建线程将有助于取决于GPU与CPU(如果有)利用率的比较。如果CPU上存在大量处理并且CPU阻止GPU计算,则创建更多线程会有所帮助。
有更多细节(请参阅docs了解CUDA的实际版本),它限制了流中操作的重叠。仅当RAM中的内存源或目标被页面锁定时,内存副本才与内核执行重叠。或者,当主机线程在默认流中发出命令时,会发生流之间的同步。 (由于CUDA 7每个线程都有自己的默认流,因此在不同线程中处理ROI会再次有用。)
因此,满足某些条件,如果ROI的处理发生在不同的流中达到一定限度(取决于内核的资源消耗,内存拷贝和计算的比率等等),它应该提高算法的性能。