在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