使用 CUDA Stream 的优势

Advantage of using a CUDA Stream

我正在尝试了解 Stream 可以在何处帮助我处理视频帧上的多个感兴趣区域。如果使用支持流的 NPP 函数,是否会启动与 ROI 一样多的流?甚至可能为每个 Stream 创建一个 CPU 线程?或者使用一个流来处理所有 ROI 并可能在 CPU 中使用来自多个线程的单个流的好处?

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

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

还有更多详细信息(有关 CUDA 的实际版本,请参阅 documentation)限制流中操作的重叠。仅当 RAM 中的内存源或目标为 page-locked 时,内存复制才会与内核执行重叠。或者,当主机线程在默认流中发出命令时,流之间会发生同步。 (因为 CUDA 7 每个线程都有自己的默认流,所以在不同线程中处理 ROI 会再次有所帮助。)

因此,在满足某些条件的情况下,如果 ROI 的处理发生在不同的流中达到一定的限制(取决于内核的资源消耗、内存副本和计算的比率等),它应该会提高算法的性能。 .)