2015-03-19 202 views
0

here羅伯特克羅維拉說,cublas例程可以從設備代碼調用。雖然我使用動態並行和使用計算能力3.5進行編譯,但我無法通過設備函數調用Cublas例程。我總是得到錯誤我的代碼包含了設備的功能,其調用CUBLAS程序一樣cublsAlloccublasGetVectorcublasSetVectorcublasDgemm是否可以通過設備函數調用cublas函數?

我的編輯和「設備/全球功能是不允許調用主機功能」聯的命令:


 
nvcc -arch=sm_35 -I. -I/usr/local/cuda/include -c -O3 -dc GPUutil.cu -o ./build/GPUutil.o 
 
nvcc -arch=sm_35 -I. -I/usr/local/cuda/include -c -O3 -dc DivideParalelo.cu -o ./build/DivideParalelo.o 
 
nvcc -arch=sm_35 -I. -I/usr/local/cuda/include -dlink ./build/io.o ./build/GPUutil.o ./build/DivideParalelo.o -lcudadevrt -o ./build/link.o 
 
icc -Wwrite-strings ./build/GPUutil.o ./build/DivideParalelo.o ./build/link.o -lcudadevrt -L/usr/local/cuda/lib64 -L~/Intel/composer_xe_2015.0.090/mkl/lib/intel64 -L~/Intel/composer_xe_2015.0.090/mkl/../compiler/lib/intel64 -Wl,--start-group ~/Intel/composer_xe_2015.0.090/mkl/lib/intel64/libmkl_intel_lp64.a ~/Intel/composer_xe_2015.0.090/mkl/lib/intel64/libmkl_sequential.a ~/Intel/composer_xe_2015.0.090/mkl/lib/intel64/libmkl_core.a ~/Intel/composer_xe_2015.0.090/mkl/../compiler/lib/intel64/libiomp5.a -Wl,--end-group -lpthread -lm -lcublas -lcudart -o DivideParalelo \t \t 
 

+2

您的編譯命令不正確。你沒有鏈接到'-lcublas_device',還有其他問題。您可能想參考[cuda示例代碼](http://docs.nvidia.com/cuda/cuda-samples/index.html#simpledevlibcublas-gpu-device-api-library-functions--cuda-dynamic- parallelism-),它展示瞭如何從設備使用cublas,幷包含可以學習的makefile。 [這個問題/答案](http://stackoverflow.com/questions/27094612/cublas-matrix-inversion-from-device)給出了一個完整的工作示例,包括編譯命令。 – 2015-03-19 14:14:41

回答

1

Here你可以找到所有關於CUBLAS設備API的細節,如:

與5.0版開始,CUDA工具包現在提供了包含設備程序使用相同的API作爲常規靜態CUBLAS庫cublas_device.a cuBLAS庫。這些例程在內部使用Dynamic Parallelism功能從內部啓動內核,因此僅適用於計算能力至少等於3.5的設備。

爲了從設備使用這些庫例程,用戶必須包含與新的cuBLAS API對應的頭文件「cublas_v2.h」,並鏈接到靜態cuBLAS庫cublas_device.a。

如果您在閱讀文檔並應用其中描述的所有步驟後仍然遇到問題,請尋求其他幫助。

+0

感謝您的快速回答。我在GPUutil.cu文件中添加了#included「cublas_v2.h」,在Makefile中添加了-lcublas_device鏈接。但cublas沒有被檢測到,並且在任何cublas調用中我都有編譯錯誤。我正在使用cuda 6.5的任何想法,我做錯了什麼? – emartel 2015-03-19 16:42:18

+0

@emartel是否在編譯計算能力3.5?即'sm_35'? – 2015-03-19 17:14:18

+0

是的,我正在爲cc 3.5編譯您可以在我的Makefile中看到CUDA_FLAGS,並在編譯GPUutil.cu時使用(此文件包含對cublas例程的調用)。 – emartel 2015-03-19 17:33:52

相關問題