MSB3721錯誤+CUDA中pow函式出錯

怎 樣發表於2020-12-04

在Visual Studio2019使用CUDA做影像處理方面的程式碼編寫時,執行CUDA模板程式時一切正常,可是執行自己寫的程式碼時就報錯:

嚴重性 說明 專案 檔案 行 禁止顯示狀態
錯誤 命令““C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nvcc.exe” -gencode=arch=compute_35,code=“sm_35,compute_35” --use-local-env -ccbin “D:\Program Files\Visual Studio\IDE\VC\Tools\MSVC\14.28.29333\bin\HostX86\x64” -x cu -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include" -G --keep-dir x64\Debug -maxrregcount=0 --machine 64 --compile -cudart static -g -DWIN32 -DWIN64 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Fdx64\Debug\vc142.pdb /FS /Zi /RTC1 /MDd " -o x64\Debug\kernel.cu.obj “E:\VS Code\CUDA_Program\kernel.cu””已退出,返回程式碼為 255。 CUDA_Program D:\Program Files\Visual Studio\IDE\MSBuild\Microsoft\VC\v160\BuildCustomizations\CUDA 10.1.targets 764

在這裡插入圖片描述

最初以為是自己執行環境設定出了問題,找了半天網上的資料也沒有解決。最後自己試著註釋所寫的程式碼,一個一個函式釋放出來測試是不是程式碼的問題,最終找到了錯誤地方,
在這裡插入圖片描述
是上面函式的最後一條語句,找到了這裡最初不理解哪裡錯了,一部分一部分試,最終確定了是pow()函式這裡出了問題,這裡就要引出CUDA領域的知識了。

pow()函式在C/C++中是位於標頭檔案< cmath >或<math.h>中的,但它是一個執行於cpu上的函式。而在CUDA核函式中,pow()是不能執行的,在CUDA中代替功能的函式是powf()(powf是CUDA的內建函式),它位於math_functions.h檔案中,所以以後在CUDA核函式中要使用powf()。
在這裡插入圖片描述

再轉回最初的問題,如果你在vs中遇見了同樣的報錯,在檢查環境設定之後仍不能解決問題,請嘗試到程式碼中尋找問題。

相關文章