什么是<;溢出>;是说在CUDA评测期间?

什么是<;溢出>;是说在CUDA评测期间?,cuda,profiling,gpu,Cuda,Profiling,Gpu,我在使用nvprof或nvvp进行CUDA代码评测时注意到了这种wierd行为。它显示的不是计数器的实际值,而是溢出 例如,我使用 nvprof --print-gpu-trace --metrics warp_execution_efficiency ./CUDA-EC 我得到的结果是: Device Kernel Warp Execution Efficiency Tesla K20m (0) fix_errors1_w

我在使用nvprof或nvvp进行CUDA代码评测时注意到了这种wierd行为。它显示的不是计数器的实际值,而是溢出

例如,我使用

 nvprof --print-gpu-trace --metrics  warp_execution_efficiency ./CUDA-EC
我得到的结果是:

Device           Kernel                      Warp Execution Efficiency
Tesla K20m (0)   fix_errors1_warp_cop        <OVERFLOW>
设备内核扭曲执行效率
特斯拉K20m(0)修复错误1扭曲cop

有人能告诉我如何避免这种情况并获取实际价值吗?当我使用nvvp时也会发生这种行为。

如果物理硬件计数器在捕获期间达到其最大值,并且探查器无法确定正确的值,则计数器会报告溢出。NVIDIA GPU上的大多数硬件计数器为32位。在Maxwell中,SM计数器的宽度增加到约40位

许多PM实验可以使物理计数器每周期增加6位(0-63)。在1 GHz时,32位计数器的最小溢出时间约为68毫秒。实际上,当内核超过1秒时,许多更复杂的实验将溢出

为了避免溢出,开发人员可能必须通过减少数据集或将内核分为多个启动来减少内核的执行时间


NVIDIA工具团队正在开发多种软件和硬件解决方案,以消除运行时间较长的内核中的溢出问题。不幸的是,这些解决方案需要时间来实现

您正在使用哪个CUDA版本?你能提供一个简短完整的代码来产生这个输出(以及产生它的步骤)吗?据我所知,长时间运行的内核可能会导致GPU硬件中的事件计数器溢出(我记得,在旧的GPU上,它们只包含32位)。尝试减少受影响内核的运行时间。这是CUDA 6.5。很抱歉,代码太大,有多个文件@njuffa,这个内核在K20m上运行大约3秒。在K20m的基本时钟频率为706 MHz的情况下,每个周期递增的32位计数器将在6.08秒后溢出,因此我不确定我的工作假设是否适用。如果有一个简单的方法来减少这个内核的运行时间来进行一个快速的实验,那么作为一个健全的检查,它可能值得一试。谢谢大家,我通过减少数据大小将内核时间缩短到了1.5秒,这个计数器现在工作了。我很高兴。长期以来,我从nvvp/nvprof获得的数据不足,我过去常常为此责怪司机:\