首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NVVP和计数器报告的时间差

NVVP和计数器报告的时间差
EN

Stack Overflow用户
提问于 2012-09-19 23:13:43
回答 1查看 1.1K关注 0票数 0

我一直在运行CUDA程序的内核。我观察到GPU计数器和NVVP报告的内核执行时间有相当大的差异。为什么通常会观察到这样的差异?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-20 04:10:26

Nsight Visual Studio Edition和Visual Profiler支持两种捕获内核持续时间的机制。这两种方法都会产生一个比CUevent/cudaEvent报告的值更小、更准确的值。方法如下:

  1. 并发内核计时这是Nsight 2.x和Visual Profiler5.0用来生成时间线的默认模式。内核的持续时间被定义为从内核代码在设备上开始执行到它完成的时间。这不能使用CUDA事件进行测量。
  2. 序列化内核计时这是工具收集每个内核的PM计数器时使用的默认模式。内核的持续时间被定义为在内核完成之后GPU处理启动请求直到GPU空闲的时间。此模式特别禁用并发内核执行。在几乎所有情况下,报告的持续时间将略大于并发内核跟踪持续时间,因为它包括GPU启动第一个块的时间和GPU完成所有内存存储的时间。
  3. CUDA事件范围计时CUDA事件计时通过在同一个流上的内核启动前后调用cu/cudaEventRecord来完成。每个事件记录将一个命令插入到GPU推送缓冲区中。当命令到达GPU时,它会将时间戳写入内存。可以在不启动的情况下推送两个事件记录。这允许开发人员测量两个时间戳命令之间的GPU时间。这种方法有以下缺点,这就是我鼓励开发人员使用这些工具(Nsight、Visual Profiler和CUPTI)的原因:a.提交启动事件记录和启动之间经过的时间可能会受到CPU开销的影响。启动开销在Linux/TCC上为5-8µs,在WDDM上可能更高。

b. GPU可以在启动事件记录和内核执行之间进行上下文切换。

c.启动事件记录将包括启动开销,包括更新需要调整大小的驱动程序缓冲区的时间、复制参数、复制纹理绑定等。

d.提交内核和结束事件记录之间经过的时间可能会影响计时。

e. GPU可以在内核执行的结束和结束事件记录之间进行上下文切换。

f.错误使用事件将中断并发内核执行。

这些模式中每种模式提供的持续时间将提供不同的值。此外,由工具提供的持续时间的定义与通过使用事件提供的持续时间的定义是不同的。

NVIDIA工具将持续时间定义为从GPU开始处理内核到GPU完成内核工作这段时间。如果开发人员有兴趣收集这些信息,他们应该查看工具包中包含的CUPTI SDK。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12497619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档