是否可以通过设备功能调用cublas函数?

时间:2015-03-19 11:00:19

标签: cuda device cublas dynamic-parallelism

here中,Robert Crovella说可以从设备代码中调用cublas例程。虽然我使用动态并行性并使用计算能力3.5进行编译,但我无法通过设备函数调用Cublas例程。我总是收到错误“不允许从设备调用主机功能 / 全局功能”我的代码包含调用CUBLAS例程的设备函数例如cublsAlloccublasGetVectorcublasSetVectorcublasDgemm

我的编译和链接命令:

  
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 		
 

1 个答案:

答案 0 :(得分:1)

Here您可以找到有关cuBLAS设备API的所有详细信息,例如:

  

从5.0版开始,CUDA工具包现在提供了一个静态cuBLAS库cublas_device.a,它包含与常规cuBLAS库具有相同API的设备例程。这些例程在内部使用动态并行功能从内部启动内核,因此仅适用于计算能力至少等于3.5的设备。

     

为了使用设备中的这些库例程,用户必须包含与新cuBLAS API相对应的头文件“cublas_v2.h”,并链接到静态cuBLAS库cublas_device.a。

如果您在阅读完文档并应用其中描述的所有步骤后仍然遇到问题,请寻求其他帮助。