【问题标题】:How to get CUDA event starting and ending time without using nvprof如何在不使用 nvprof 的情况下获取 CUDA 事件的开始和结束时间
【发布时间】:2017-10-15 22:56:11
【问题描述】:

我编写了一些使用 JCuda 执行一些 CUDA 内核的 Java 代码。我想分析应用程序,以了解流是如何重叠的等等。我可以使用 cuda 事件调用(例如 cudaEventElpasedTime)来获取内核的执行时间,但我不知道如何获取同一内核的开始和结束时间戳。

我知道 nvprof 可以生成这样的结果并显示时间线,但我找不到使用 Java 应用程序运行 nvprof 的方法。

编辑:现在我了解了如何使用 nvprof 来分析 Java 应用程序,这要归功于答案。我仍然更喜欢使用 cudaEvent 调用来获取开始和结束时间,这样我就有更多的控制权。似乎 nvprof 可以获取该信息,但没有 API 可供最终用户这样做?

【问题讨论】:

  • @Shadow 我仍然更喜欢使用 cudaEvent 调用来获取开始和结束时间,因为它可以让我更好地控制要分析的内容。
  • 您也可以使用 Visal Profiler。在 did not worksome other versions 之后,它似乎终于可以再次与 CUDA 8.0 一起使用了。
  • @Marco13,这只能在windows下工作吗?我读到我们需要制作一个 .bat 才能让它工作,我还没有在 linux 下尝试过 .sh 脚本。
  • 我刚刚在Windows(8.1)下试了一下。我认为它应该也可以在带有sh 文件的 Linux 下工作,但我不确定(我有一段时间没有积极使用可视化分析器,因为它不适用于 JCuda,并且从来没有在 Linux 上使用过它,但是从概念上来说,我认为它应该工作...)

标签: cuda jcuda nvprof


【解决方案1】:

有两种方法可以做到这一点:

  1. 如果您可以通过命令行运行 JCuda 应用程序,则可以使用命令 nvprof --profile-child-processes <command to run your JCuda application>

  2. 对其进行分析
  3. 如果您无法通过命令行运行应用程序,请打开终端并使用命令 nvprof --profile-all-processes 运行 nvprof。 Nvprof 将进入守护程序模式并继续等待 CUDA 活动发生。现在像往常一样从 IDE 启动应用程序,一旦 CUDA 活动发生并且应用程序退出,nvprof 将在其终端会话中打印结果。

【讨论】:

  • 这是一个很好的答案。由于 JCuda 应用程序在多个线程上运行,我认为 --profile-child-processes 可能只返回一个 JVM 中的执行时间,我将对其进行研究并稍后在此处发布我的发现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多