在 CUDA 分析期间 <overflow> 是啥意思?
Posted
技术标签:
【中文标题】在 CUDA 分析期间 <overflow> 是啥意思?【英文标题】:What does <overflow> mean during CUDA profiling?在 CUDA 分析期间 <overflow> 是什么意思? 【发布时间】:2014-12-02 15:47:44 【问题描述】:在使用 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 时也会出现这种行为。
【问题讨论】:
您使用的是哪个 CUDA 版本?你能提供一个简短、完整的代码,它会产生这个输出(以及产生它的步骤)吗? 据我所知,长时间运行的内核可能会导致 GPU 硬件中的事件计数器溢出(在较旧的 GPU 上,这些仅包含 32 位,我记得最好)。尝试减少受影响内核的运行时间。 这是 CUDA 6.5。很抱歉,代码太大并且有多个文件。 @njuffa,这个内核在 K20m 上运行了大约 3 秒。 在 706 MHz 的 K20m 基本时钟频率下每个周期递增的 32 位计数器会在 6.08 秒后溢出,所以我不确定我的工作假设是否完全适用。如果有一种简单的方法可以减少此内核的运行时间以进行快速实验,那么作为健全性检查可能值得一试。 【参考方案1】:如果物理硬件计数器在捕获期间达到其最大值并且分析器无法确定正确的值,则计数器会报告溢出。 NVIDIA GPU 上的大多数硬件计数器都是 32 位的。在 Maxwell 中,SM 计数器宽度增加到 ~40 位。
许多 PM 实验可以在每个周期将物理计数器增加 6 位 (0-63)。在 1 GHz 时,32 位计数器的最小溢出时间约为 68 毫秒。在实践中,许多更复杂的实验会在内核超过 1 秒时溢出。
为了避免溢出,开发人员可能不得不通过减少数据集或将内核分成多次启动来减少内核的执行时间。
NVIDIA 工具团队正在开发多种软件和硬件解决方案,以消除运行时间较长的内核中的溢出问题。不幸的是,这些解决方案需要时间来实施。
【讨论】:
谢谢大家,我通过减少数据大小将内核时间缩短到 1.5 秒,这个计数器现在可以工作了。我很开心。长期以来,我从 nvvp/nvprof 获得的数据不足,我曾经为此责备驱动程序:\以上是关于在 CUDA 分析期间 <overflow> 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
分析一个CUDA矩阵加法代码,使用nvprof:代码API配置文件,内核没有
分析一个CUDA矩阵加法代码,使用nvprof:代码API配置文件,内核没有