0

这里, Robert Crovella 说可以从设备代码中调用 cublas 例程。尽管我正在使用动态并行性并使用计算能力 3.5 进行编译,但我无法设法从设备函数调用 Cublas 例程。我总是收到错误“从设备调用主机函数/不允许全局函数”我的代码包含调用 CUBLAS 例程的设备函数,如cublsAlloc,和cublasGetVectorcublasSetVectorcublasDgemm

我的编译和链接命令:

  
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 		
 

4

1 回答 1

1

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

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

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

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

于 2015-03-19T11:35:11.507 回答