[英]cuda integration in a C++ file
我已經閱讀了所有相關主題,包括將.cu
文件轉換為其他人之前編寫的.cpp
文件,但是沒有任何幫助。
我在項目的C ++文件中包含文件時遇到問題。 我的項目結構如下: main.cpp
compute.h
compute.cpp
kernel.cu
。
main.cpp
具有我項目的main()入口。 幾個_host_
cuda函數,它包含compute.h
因為它調用了compute.h中定義的某些函數。
compute.cpp
僅具有C++
函數,使用sum<<<1,numbloc>>>(list of parameters)
函數,該函數引用kernel.cu
設備代碼。 然后,我將kernel.cu
包含在compute.cpp
標頭中。 但是在使用cuda 5.0在我的Visual Studio 2008上編譯時出現問題,並且錯誤顯示
error C3861:'_syncthreads':identifier not found
但是當我寫projetc與單一main.cu
含有main(){}
和我_host_
功能,它建立沒有錯誤。
我可以保持如上所述的項目結構,並在沒有錯誤的情況下運行我的項目嗎? 請幫忙!
默認情況下,.cpp文件不能包含非常規C / C ++語法的任何內容。 cuda內核調用kernel<<<...>>>()
不能位於.cpp文件中,除非您將特殊開關傳遞給nvcc。
因此,通常的建議是重命名以這種方式使用CUDA的任何文件,使其具有.cu擴展名而不是.cpp擴展名,並使用nvcc編譯該文件。
對於任何特定於CUDA的語法也是如此。 (請注意,這並不意味着調用CUDA API,例如cudaMalloc
,如果您包含cuda_runtime.h並正確鏈接,則可以在普通的.cpp文件中進行調用。)因此,如果實際上您的__host__
函數裝飾器是main.cpp,也將不起作用(使用默認編譯器設置)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.