我写了一些使用JCuda执行一些CUDA内核的Java代码。我想分析该应用程序,以了解流是如何重叠的等等。我能够使用 cuda 事件调用(例如 cudaEventElpasedTime(来获取内核的执行时间,但我不知道如何获取同一内核的开始和结束时间戳。
我知道 nvprof 可以生成这样的结果并显示时间线,但我找不到使用 Java 应用程序运行 nvprof 的方法。
编辑:现在我明白了如何使用nvprof来分析Java应用程序,这要归功于答案。我仍然更喜欢使用 cudaEvent 调用获取开始和结束时间,这样我就可以更好地控制。似乎 nvprof 可以获取该信息,但没有供最终用户这样做的 API?
有两种方法可以做到这一点:
-
如果可以通过命令行运行 JCuda 应用程序,则可以使用命令对其进行分析
nvprof --profile-child-processes <command to run your JCuda application>
-
如果无法通过命令行运行应用程序,请打开终端并使用命令
nvprof --profile-all-processes
运行 nvprof。Nvprof将进入守护程序模式并继续等待CUDA活动的发生。现在像往常一样从 IDE 启动应用程序,一旦 CUDA 活动发生并且应用程序退出,nvprof 将在其终端会话中打印结果。