这篇文章介绍了 NVIDIA GPU 上异步复制的最佳实践。要在应用程序中获得高且一致的帧速率,请参阅所有高级 API 性能提示.
异步复制在完全独立的硬件上运行,但您必须将其调度到单独的队列中。您可以考虑将异步副本转换为异步计算作为性能策略。 NVIDIA 有专用的异步复制引擎。按性能改进的降序使用以下策略:
- 完全并行: Use async copy .
- 部分并行:通过驱动程序性能策略将同步副本转换为异步计算。计算工作负载与图形工作负载重叠。
- 没有平行性:执行复制和图形工作的串行执行。
- 负比例:将同步副本转换为异步计算,但由于 SOL 冲突,需要更长的时间。
部分并行性要求开发人员创建和管理一个单独的拷贝队列,这需要隔离和可能的调度复杂性。在这种情况下,将同步副本转换为异步计算比异步副本更值得。但是,任何不能转换为异步计算的工作也不能转换为异步副本,反之亦然。
推荐
- 将复制工作放入异步复制队列,以使用 NVIDIA RTX 专用异步复制引擎来加速和并行化复制工作。
- 如果同步复制队列在技术上过于复杂,请将复制工作转换为异步计算工作,而不是异步复制。
- 在异步复制队列上使用
updateTileMappings
,具有足够的延迟以覆盖可变的更新成本。这降低了与更新关键的直接和异步计算队列相关的成本
不推荐
- 不要忘记使用 fences / semaphores 来调度图形队列的异步复制工作,这会创建竞争条件。
- 尽量减少围栏的数量,以避免不必要的空转。
- 不要将工作放在复制队列上,以便立即或很快使用,因为复制队列不仅与图形队列串行运行,而且会产生切换引擎的开销。
- 不要将本地 GPU 副本移动到异步复制队列上,因为由此产生的开销可能会使其不值得。
- 不要使用需要 GPU 带宽饱和的异步拷贝,除非您有足够的时间覆盖这些周期。异步复制引擎通常是为使 PCIE 带宽饱和而构建的,但如果有足够的时间来支付这些速度下的传输成本,则可以将其用作通用复制引擎。
致谢
感谢帕特里克·尼尔、艾伦·沃尔夫和迈克·墨菲的帮助 p 建议和审查本职位。