2014-02-20 53 views
-1

我有調試CUDA內核的問題。一些變量不能在調試器中進行評估。經過很多調查和簡化項目和代碼我在調用內核的DLL中有一個非常簡單的項目包含主應用程序調用宿主函數。 使用Visual Studio的項目嚮導實際創建的內核代碼。 另外我有EMPTY .cu文件。當它包含來建立我有一個問題。 當這個文件排除構建 - 一切正常。 空文件的DLL調試版本的大小是92 kb,沒有90kb。調試CUDA內核時無法解析名稱

我的設置是 的Windows 7專業版64位 VS2010臨 NVIDIA Nsight VS版3.2.2 CUDA SDK 5.5 NVIDIA驅動程序331.82

+1

什麼確切你的問題?我只看到你的問題列表?另請提供更多信息,例如您的簡單項目。 – hubs

+0

我的問題是調試代碼。如果不調試代碼並評估變量,我無法轉發我的項目。我可以分享完整的解決方案(12KB 5kb zip)。鏈接到谷歌驅動器是好的? – BaraBashkaD

+1

不要在你的問題中放置外部鏈接。當這些鏈接失效時,這個問題對於未來的讀者將變得沒有用處。相反,將問題簡化爲可以完全發佈在問題中的簡短內容。在減少的過程中,您可能會發現自己的問題或關鍵問題。 –

回答

0

儘管這個問題被downvoted,我遇到了同樣的問題,以及和後一些調查發現,當我將「Configuration Properties | CUDA C/C++ | Common | Generate Relocatable Device Code」設置爲「Yes」時發生了這種情況,這對我來說非常重要。設置爲「否」解決了這個問題,但我不知道爲什麼。

3

最後我發現問題的根源和解決方法。 當解決方案非常複雜並且包含幾個cpp和cu文件時,會出現問題。 因爲這需要「可重定位設備代碼」。否則,GPU代碼不能被分成幾個CU文件。

CU file passed for compilation to NVCC that perform preprocessing and divide code to host and gpu. After that host code compiled with VC compiler and gpu continue with nvcc.

當CU文件不又名包括任何GPU代碼__device__功能的調試信息被打破。 所以解決方法是添加虛擬函數在這類CU文件:

__device__ void dummy1() 
{ 
} 
+0

這也適用於我。 –

+0

儘管這個問題有點尷尬,但我在使用nSight調試CUDA時遇到了同樣的問題,但是使用rdc標誌進行編譯, 我通過將所有編譯文件合併爲一個文件並排除rdc標誌來解決該問題。 – TripleS