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

时间:2012-09-19 15:13:43

标签: cuda

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

1 个答案:

答案 0 :(得分:4)

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

  1. 并发内核时序

    这是Nsight 2.x和Visual Profiler 5.0用于生成时间轴的默认模式。内核的持续时间定义为从内核代码开始在设备上执行到完成时间的时间。这不能使用CUDA事件来衡量。

  2. 序列化内核时序

    这是工具在为每个内核收集PM计数器时使用的默认模式。内核的持续时间定义为GPU处理启动请求的时间,直到GPU在内核完成后空闲。此模式专门禁用并发内核执行。在几乎所有情况下,报告的持续时间将略大于并发内核跟踪持续时间,因为它包括GPU启动第一个块的时间以及GPU完成所有内存存储的时间。

  3. CUDA事件范围时间

    CUDA事件计时是通过在同一个流上内核启动之前和之后调用cu / cudaEventRecord来完成的。每个事件记录都将命令插入GPU推送缓冲区。当命令到达GPU时,它会将时间戳写入内存。可以在没有启动的情况下推送两个事件记录。这允许开发人员测量两个时间戳命令之间的GPU时间。这种方法有以下缺点,这就是为什么我鼓励开发人员使用这些工具(Nsight,Visual Profiler和CUPTI):

      一个。提交启动事件记录和启动之间经过的时间可能会受到CPU开销的影响。在Linux / TCC上启动开销为5-8μs,在WDDM上可能要高得多。

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

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

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

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

      F。不正确的事件使用将破坏并发内核执行。

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

    NVIDIA工具定义了从GPU开始在内核上工作到GPU完成内核工作的时间尽可能最好的持续时间。如果开发人员有兴趣收集这些信息,他们应该查看工具包中包含的CUPTI SDK。