CUDA性能测量:热状态与冷状态的比较

💡 原文英文,约1000词,阅读约需4分钟。
📝

内容提要

本文探讨了CUDA内核性能测量,包括“热”状态和“冷”状态。由于缓存效应,性能测量可能与实际性能不符。为消除缓存影响,可在每次运行内核前刷新GPU L2缓存。通过示例代码展示了这一过程,并比较了两种状态下的延迟差异。

🎯

关键要点

  • CUDA内核性能测量通常通过多次运行内核并取平均执行时间来完成。
  • 缓存效应可能导致测量性能与实际性能不符。
  • 在每次运行内核前刷新GPU L2缓存可以消除缓存影响,使内核在'冷'状态下运行。
  • 没有直接的API来刷新GPU L2缓存,但可以通过分配同样大小的缓冲区并写入值来驱逐缓存值。
  • 示例代码展示了如何在'热'状态和'冷'状态下测量CUDA内核性能。
  • 在'热'状态下,内核从L2缓存读取数据,而在'冷'状态下则从DRAM读取。
  • 性能测量的结果显示'热'状态和'冷'状态之间存在差异,主要由于缓存效应。
  • 如果内核不是内存绑定的,或者缓存大小过小,'热'状态和'冷'状态之间的性能差异可能微不足道。
  • NVIDIA Nsight Compute工具在每次重放前默认刷新所有GPU缓存,以确保性能计数器值的确定性。
  • 可以通过--cache-control none选项禁用工具的缓存刷新,以便进行更准确的性能分析。

延伸问答

如何测量CUDA内核的性能?

CUDA内核的性能通常通过多次运行内核并取平均执行时间来测量。

什么是'热'状态和'冷'状态?

'热'状态是指内核从L2缓存读取数据,而'冷'状态则是从DRAM读取数据。

如何消除缓存效应以获得更准确的性能测量?

可以在每次运行内核前刷新GPU L2缓存,以消除缓存影响。

没有直接的API来刷新GPU L2缓存,应该怎么做?

可以通过分配同样大小的缓冲区并写入值来驱逐缓存值。

使用NVIDIA Nsight Compute工具时,如何确保性能计数器值的确定性?

NVIDIA Nsight Compute工具默认在每次重放前刷新所有GPU缓存,以确保性能计数器值的确定性。

在'热'状态和'冷'状态下的性能差异有多大?

性能差异主要由于缓存效应,但如果内核不是内存绑定的,差异可能微不足道。

➡️

继续阅读