在here中,Robert Crovella说可以从设备代码中调用cublas例程。虽然我使用动态并行性并使用计算能力3.5进行编译,但我无法通过设备函数调用Cublas例程。我总是收到错误“不允许从设备调用主机功能 / 全局功能”我的代码包含调用CUBLAS例程的设备函数例如cublsAlloc
,cublasGetVector
,cublasSetVector
和cublasDgemm
我的编译和链接命令:
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
答案 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。
如果您在阅读完文档并应用其中描述的所有步骤后仍然遇到问题,请寻求其他帮助。