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缓存,以确保性能计数器值的确定性。
在'热'状态和'冷'状态下的性能差异有多大?
性能差异主要由于缓存效应,但如果内核不是内存绑定的,差异可能微不足道。
➡️