0

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

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

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

4

1 回答 1

2

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

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

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

于 2017-05-17T04:35:07.067 回答