2015-03-19 197 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

相关问题