我试图了解 Stream 可以在哪里帮助我处理视频帧上的多个感兴趣区域。如果使用支持流的 NPP 函数,是否会启动与 ROI 一样多的流?甚至可能为每个 Stream 创建一个 CPU 线程?还是使用一个流来处理所有 ROI 并可能使用来自 CPU 中多个线程的单个流的好处?
问问题
6467 次
1 回答
8
在 CUDA 中,流的使用通常有助于以两种方式更好地利用 GPU。首先,如果复制和执行发生在不同的流中,则主机和设备之间的内存复制可以通过内核执行重叠。其次,如果 GPU 上有足够的资源,运行在不同流中的单个内核可能会重叠。
此外,为每个 ROI 创建线程是否有帮助取决于 GPU 与 CPU(如果有)利用率的比较。如果 CPU 上有大量处理并且 CPU 延迟了 GPU 计算,那么创建更多线程会有所帮助。
还有更多细节(参见 CUDA 实际版本的文档)限制流中操作的重叠。仅当 RAM 中的内存源或目标是页面锁定时,内存副本才会与内核执行重叠。或者,当主机线程在默认流中发出命令时,流之间会发生同步。(由于 CUDA 7 每个线程都有自己的默认流,因此在不同线程中处理 ROI 将再次有所帮助。)
因此,满足某些条件,如果 ROI 的处理发生在不同的流中达到一定的限制(取决于内核的资源消耗、内存副本和计算的比率等),它应该会提高算法的性能。
于 2017-02-01T01:26:55.623 回答