在here羅伯特克羅維拉說,cublas例程可以從設備代碼調用。雖然我使用動態並行和使用計算能力3.5進行編譯,但我無法通過設備函數調用Cublas例程。我總是得到錯誤我的代碼包含了設備的功能,其調用CUBLAS程序一樣cublsAlloc
,cublasGetVector
,cublasSetVector
和cublasDgemm
是否可以通過設備函數調用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
您的編譯命令不正確。你沒有鏈接到'-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