【问题标题】:Call cublas in a kernel在内核中调用 cublas
【发布时间】:2013-10-28 01:43:01
【问题描述】:

我想并行使用 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。

【问题讨论】:

    标签: cuda cublas


    【解决方案1】:

    使用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
    

    【讨论】:

    • 谢谢。我可以编译那个。但我仍然无法并行内核中的 Zgemv……我的意思是我有 32 个矩阵向量乘法,我想并行执行。
    • 我还发现这个link 对示例很有帮助。
    猜你喜欢
    • 2018-01-07
    • 1970-01-01
    • 2019-12-13
    • 2021-02-07
    • 2012-09-16
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    相关资源
    最近更新 更多