cuda - 在内核中调用 cublas

标签 cuda cublas

我想并行使用 Zgemv。

__global__ void S_Cphir(cuDoubleComplex *S,cuDoubleComplex *A,cuDoubleComplex *B, int n,int l)
{
    ....
cublasZgemv(handle,CUBLAS_OP_N,n,n,&alpha,S+i*n*n,n,A+n*i,1,&beta,B+i*n,1);}

void S_Cphir_(cuDoubleComplex *S,cuDoubleComplex *A,cuDoubleComplex *B, int n,int l){
dim3 grid = dim3(1,1,1);
dim3 block = dim3(32,1,1);
S_Cphir<<<grid,block>>>(S,A,B,n,l);}

我的编译命令是

nvcc -c -arch=compute_30 -code=sm_35 time_propagation_cublas.cu --relocatable-device-code true
nvcc -o  ./main.v2 time_propagation_cublas.o -lcublas

第一行是工作。但是第二行错了!!

In function`__sti____cudaRegisterAll_58_tmpxft_000032b7_00000000_6_time_propagation_cublas_cpp1_ii_0d699356()';tmpxft_000032b7_00000000-3_time_propagation_cublas.cudafe1.cpp:(.text+0x17a4): 
undefined reference to `__cudaRegisterLinkedBinary_58_tmpxft_000032b7_00000000_6_time_propagation_cublas_cpp1_ii_0d699356'
collect2: ld returned 1 exit status

我搜索“cudaRegisterLinkedBinary”但我什么都没有!!

我知道 nvcc 支持在内核中调用 cublas。

最佳答案

使用 CUBLAS Device Library sample code作为您的引用。在标准的 CUDA 5.5 安装中,您将在以下位置找到它:

/usr/local/cuda/samples/7_CUDALibraries/simpleDevLibCUBLAS

引用那个目录下的Makefile,你的编译命令应该是这样的:

nvcc -arch=sm_35 -rdc=true -o main.v2 time_propagation_cublas.cu -lcublas -lcublas_device -lcudadevrt

关于cuda - 在内核中调用 cublas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19462779/

相关文章:

cuda - 使用 CUBLAS 例程在 GPGPU 上保留点积

c++ - CUDA:将 M[][] 用于 2D 静态数组还是将它们展平为 M[] 更好?

python - Numpy 托普利茨矩阵

cuda - 如何在CUBLAS中计算复数幂?

CUDA 三重循环

MATLAB 产生的结果与 CUBLAS + Kernel 不同

转置时澄清 CUBLAS 中的主要维度

c++ - 在CUDA中乘以矢量化二维方阵和压缩三对角矩阵

c# - 当需要将数组复制回主机时如何避免同步?

c++ - 使用 cuda_gl_interop 函数设置时是否可以检索像素缓冲区?