如何在不使用nvprof的情况下获得CUDA事件的开始和结束时间

时间:2017-05-16 18:04:18

标签: cuda jcuda nvprof

我编写了一些使用JCuda执行某些CUDA内核的Java代码。我想剖析应用程序,以了解流如何重叠和诸如此类的东西。我能够使用cudaEventElpasedTime等cuda事件调用来获取内核的执行时间,但我不知道如何获取同一内核的开始和结束时间戳。

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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