2017-05-16 51 views
0

我編寫了一些使用JCuda來執行某些CUDA內核的Java代碼。我想介紹一下這個應用程序,以瞭解流是如何重疊以及什麼的。我可以使用cuda事件調用(如cudaEventElpasedTime)來獲取內核的執行時間,但我不知道如何獲取同一個內核的開始和結束時間戳。如何在不使用nvprof的情況下獲得CUDA事件的開始和結束時間

我知道nvprof可以生成這樣的結果並顯示時間表,但是我沒有找到用Java應用程序運行nvprof的方法。

編輯:現在我明白如何使用nvprof來剖析Java應用程序,這要歸功於答案。我仍然更喜歡使用cudaEvent調用獲取開始和結束時間,所以我會有更多的控制權。看來nvprof可以獲得這些信息,但是最終用戶沒有這樣做的API嗎?

+0

@Shadow我仍然更喜歡使用cudaEvent調用獲取開始和結束時間,因爲它讓我更好地控制要分析的內容。 – Xiangyu

+0

您也可以使用Visal Profiler。在[其他版本](https://devtalk.nvidia.com)[無法使用](https://forum.byte-welt.net/t/jcuda-and-nvvp-visual-profiler/3667)之後/ default/topic/524531/profiler-error-message-when-profiling-jcuda-application /)時,它似乎終於再次與CUDA 8.0一起工作。 – Marco13

+0

@ Marco13,這隻能在windows下工作嗎?我讀過,我們需要爲它做一個.bat工作,我沒有在linux下嘗試過.sh腳本。 – Xiangyu

回答

2

有兩種方法可以做到這一點:

  1. 如果你可以運行通過命令行的JCuda的應用程序,你可以使用命令nvprof --profile-child-processes <command to run your JCuda application>

  2. 配置文件,如果你不能運行通過命令行應用程序,打開終端並使用命令nvprof --profile-all-processes運行nvprof。 Nvprof將進入守護進程模式並繼續等待CUDA活動的發生。現在像往常一樣從IDE啓動應用程序,一旦CUDA活動發生並且應用程序退出,nvprof將在其終端會話中打印結果。

+0

這是一個很好的答案。由於JCuda應用程序運行在多個線程上,我認爲--profile-child-processes可能只會在一個JVM中返回執行時間,我會研究它並在稍後發佈我的發現。 – Xiangyu

相關問題