2013-08-01 33 views
3


我想知道什麼是JCuda項目(如果存在)的最佳調試器。
我知道,對於普通的CUDA應用程序,有像cuda-gdb和cuda-memcheck這樣的工具,我不知道我是否可以使用它們中的任何一個或類似的JCuda項目。
謝謝!Debug JCuda程序

回答

4

您應該可以使用常規的CUDA調試器(例如Nsight或cuda-gdb)來調試JCuda應用程序中的GPU代碼。您可以使用Java調試器(例如Eclipse)來調試Java代碼。 雖然沒有可以無縫調試Java和CUDA代碼的調試器。

+0

感謝您的答案,但我需要的是一個調試器,可以幫助執行設備代碼。我使用JCuda從Java啓動CUDA內核。我知道,本機CUDA代碼可以以某種方式進行調試,例如,顯示內存泄漏或其他優化的有用信息,但在這種情況下我不能使用這些信息。如果你可以提供一個例子或者一個教程,我可以遵循這個例子,那將非常棒! :) – Rorrim

+2

您可以嘗試附加到Java進程來調試CUDA代碼。這就是你如何調試任何JNI代碼。 – Eugene

+0

感謝您的建議。不幸的是,在Linux上我無法使用單個GPU進行調試,因此我會在Windows PC上嘗試它,並希望它能正常工作。 – Rorrim

1

在Linux上,您可以使用Nvidia Nsight(cuda-gdb)。

要設置一個啓動可執行文件調試會話:

  • 推出Nsight 爲根(奇怪,但必要對我來說)
  • 轉到運行菜單>調試配置...
  • 右擊 「C/C++應用程序」,選擇新建
  • 在主菜單選項卡
    • 集日È可執行(字段C/C++的應用)到/usr/bin/java或任何正確的路徑
  • 在Arguments標籤
    • 設置啓動參數,例如-jar target/MyApp.jar
    • 設置工作目錄
  • 在調試器選項卡下
    • 設置「CUDA GDB init文件」路徑(見下文)
    • 設置附加選項,如使CUDA MEMCHECK

因爲Java採用分段故障內部對某些人來說,聰明的目的,您將需要創建以下GDB選項,點到爲文件「CUDA GDB init文件」。請注意,通過設置此選項,您將無法在自己的JNI代碼中捕捉到分段錯誤錯誤。這應該不成問題。

handle SIGSEGV nostop noprint pass 

如果編譯與調試符號您的內核,你就可以對其進行調試。