我注意到在使用nvprof或nvvp进行CUDA代码分析时这种奇怪的行为。它不是计数器的实际值,而是显示溢出。
例如,我使用
分析我的应用程序 nvprof --print-gpu-trace --metrics warp_execution_efficiency ./CUDA-EC
我得到的结果是:
Device Kernel Warp Execution Efficiency
Tesla K20m (0) fix_errors1_warp_cop <OVERFLOW>
有人可以告诉我如何避免这种情况并获取实际值吗?当我使用nvvp时也会发生这种情况。
答案 0 :(得分:2)
如果物理硬件计数器在捕获期间达到其最大值并且分析器无法确定正确的值,则计数器报告OVERFLOW。 NVIDIA GPU上的大多数硬件计数器都是32位。在Maxwell中,SM计数器宽度增加到~40位。
许多PM实验可以在每个周期将物理计数器增加6位(0-63)。在1 GHz时,32位计数器的最小溢出时间约为68 ms。实际上,当内核超过1秒时,许多更复杂的实验都会溢出。
为了避免溢出,开发人员可能必须通过减少数据集或将内核分成多个启动来减少内核的执行时间。
NVIDIA工具团队正致力于开发多种软件和硬件解决方案,以消除运行时间更长的内核中的溢出问题。不幸的是,这些解决方案需要时间来实现