編譯和除錯CUDA程式

2021-07-25 01:43:08 字數 1750 閱讀 4280

編譯cuda程式

平台:vs2012+cuda 8.0

from:cuda toolkit document-installation guide windows-compiling cuda programs

1、建立新的專案:

新建專案-cuda 8.0 runtime

2、在現有專案中新增cuda**

專案-屬性-生成自定義-勾選cuda 8.0

專案-新增-新建項-nvidia cuda 8.0-c/c++ file, 新增cuda檔案.cu

注意:最好每一次修改**後,先清理,再編譯,否則編譯器可能會按照修改前的歷史檔案繼續之前的編譯,導致修改無效。

除錯cuda程式

本地vs中聯合除錯cpu+gpu**

在vs中,預設使用native debug,此時無法除錯cuda**,提示「當前不會命中斷點。沒有與此行關聯的除錯程式的目標**型別的可執行**」

方法1:

開兩個vs,主vs從vs主vs中通過nsight-star cuda debugging執行,事先在cuda**中設定好breakpoint,此時程式執行到breakpoint;

從vs中工具-附加到程序,傳輸-選擇預設值,限定符-選擇本機使用者,可用程序-選擇主vs中執行的程式名,此時在從vs上的cpu**中新增breakpoint即可。

該方法通過兩個程序,乙個通過cuda debug執行,乙個通過native debug執行,從而實現cpu、gpu**的同時除錯。缺點是必須先執行cuda**進入相應的breakpoint

這樣做的原因是,cuda debug和native debug在同乙個vs程序中無法共存。

方法2:nsight 的說明文件「attach to a running cuda process」一節

同樣需要開啟兩個vs,先執行native debug,後執行cuda debug。相對方法1要設定多幾個步驟:

)nsight monitor (右下角系統托盤) -options-> cuda -> use this monitor for cuda attach ->true

)新增環境變數 nsight_cuda_debugger=1

)在第二個vs中設定附加到程序,傳輸選擇nsight gpu debugger,如果native debug的程序type顯示cuda且灰色,說明環境變數沒有設定成功;如果type沒有cuda,說明程序已經附加到nsight gpu debugger

這個方法可以用在別的ide,如matlab上除錯cuda**。

參考 :

新增環境變數的方法:

我的電腦屬性-高階設定-環境變數-新增使用者變數」nsight_cuda_debugger」,設定值為1-重啟vs。

但這樣設定的環境變數是全域性有效的,會導致每次debug cuda**都呼叫nsight,影響cuda執行的效率。

嘗試將環境變數設定為本程序有效,在vs中設定環境變數。

注意:通過vs的props檔案或者user檔案設定環境變數是不行的,因為這樣只能設定生成(build)環境的環境變數,而cuda debug需要執行時的環境變數。

vs中設定除錯的環境變數,專案屬性-配置屬性-除錯-環境,新增$(nsight_cuda_debugger),不成功,附加到程序時依然顯示灰色,只能採用系統新增環境變數的方法。

雙機聯調,官方文件中有說明

天天Linux 編譯和除錯程式

使用gcc編譯程式,最簡單的用法如 gcc helloworld.c o helloworld 如果要將符號檔案載入在編譯的檔案裡,需要用 gcc helloworld.c g o helloworld 除錯可以使用gdb,類似與windows下的debug,或者windbg,最簡單的用法是 bre...

CUDA編譯過程

將test.cu 進行分離,利用cudafe.exe 去分離cpu 和gpu 我們可以在生成的中間檔案可以看到test.cudafe1.cpp和test.cudafe1.gpu cicc.exe 將根據編譯選項 arch compute xx將gpu 編譯成對應架構的test.ptx檔案 ptxas...

CUDA程式的除錯總結 不定時更新

1 cuda的程式,經常犯,但是很難發現的乙個錯誤就是同步問題。描述下例項 for k 0 k n k bs out index tx tp 看看上面的 好像沒問題。其實當n bs的時候上面的 是沒有問題的。但是當n大於bs的時候,每個執行緒會至少迴圈兩次,這樣問題就來了。假設第乙個warp的執行緒...