2013-10-19 76 views
2

我想並行使用Zgemv。在內核中調用cublas

__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。

回答

3

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

感謝。 我可以編譯。 但我仍然不能在內核中並行Zgemv ...我想說的是我有32個矩陣向量乘法,我想並行執行。 –

+0

我也發現這個[鏈接](https://solarianprogrammer.com/2012/05/31/matrix-multiplication-cuda-cublas-curand-thrust/)有幫助的例子。 –