Nvidia NSight在VS2010中进行CUDA性能分析 - .nvreport报告文件

时间:2013-04-29 06:20:45

标签: visual-studio-2010 cuda profiler nsight

我做了一些申请

在此报告文件中:

1。

当我在下拉菜单中选择“CUDA - > CUDA摘要”时

在表

中的运行时API调用项下

时间 - 80.66

推出

设备时间 - 15.46

所有其他时间百分比几乎为0%

所以我的问题是时间的19.34%和设备时间的84.54%的其余部分在哪里?也就是说,如果它们表示完全不同的'总时间'值的百分比?

2

我使用推力向量来复制我的数据。在此报告的“内存复制”部分中,我的运行的备忘录副本的所有%时间值显然可以忽略不计。

但是想想,当我点击运行时API调用(其时间百分比值高达80.66)的“摘要”链接时,我立即看到罪魁祸首 - 'cudaMemcpy'在此'运行时API调用摘要'页面中,其“捕获时间%”值高达73.75。

所以我的问题是

  • 这是否意味着我的瓶颈仍然是那些叫push :: copy(),甚至报告的“备忘录副本”部分都没有显示出来?
  • 我怎样才能真正找到对我来说最贵的函数调用?
  • 时间轴功能如何帮助解决这些问题?

1 个答案:

答案 0 :(得分:3)

CUDA摘要

在CUDA摘要中,运行时API调用下的%时间是CUDA运行时占用的CPU时间的百分比。我不记得%是否限制在100%(所有CPU线程都被展平)或者最大%是NumCpuCores * 100%。

API CALLS

要查找最昂贵的运行时API调用,请执行以下步骤:

  1. 导航到 CUDA Runtime API调用
  2. 页面
  3. 单击“持续时间”列2次以对“降序”进行排序
  4. 可以捕获CUDA Runtime API调用的调用堆栈,以便您可以从报告中跳转到源代码。可以使用以下步骤在活动中启用此功能:

    1. 导航到活动中的跟踪设置
    2. 启用系统跟踪
    3. 展开CUDA跟踪设置
    4. 启用运行时API跟踪和调用堆栈跟踪=始终
    5. 警告:将Call Stack Trace设置为Always会增加API调用开销。仅在程序受CPU限制且您尝试识别生成API调用的源代码时才启用此功能。

      可以使用报告页面左下角的相关窗格从引用API调用的报告页面访问调用堆栈跟踪。下面的屏幕截图显示了CUDA Runtime API Calls报告页面中cudaEventSynchronize调用的调用堆栈。

      Nsight VSE CUDA Runtime API Calls Report Page

      可以使用Process \ Thread \ Function Calls或Process \ CUDA \ CUDA Context \ Runtime API行的相关信息在时间轴报告页面中查询最长的API调用。

      1. 单击包含API调用的行
      2. 在关联树中,单击“行信息\运行时API”
      3. 在API调用表中,在“持续时间”列上单击2次,然后将表格滚动到顶部。
      4. 点击API调用,将时间线视图导航到API调用。
      5. 此时也可以使用关联窗格检索调用堆栈。

        enter image description here