2016-06-09 62 views
0

我試圖在我的CUDA內核中用cublasStbsv函數解決方程式。內核代碼如下:在CUDA內核中使用cublasStbsv

__global__ void invokeDeviceCublasSgemm(cublasStatus_t *returnValue, 
             int n, 
             const float *d_alpha, 
             const float *d_A, 
             const float *d_B, 
             const float *d_beta, 
             float *d_C) 
{ 
    cublasHandle_t cnpHandle; 
    cublasStatus_t status = cublasCreate(&cnpHandle); 

    if (status != CUBLAS_STATUS_SUCCESS) 
    { 
     *returnValue = status; 
     return; 
    } 

// /* Perform operation using cublas */ 
// status = 
//  cublasSgemm(cnpHandle, 
//     CUBLAS_OP_N, CUBLAS_OP_N, 
//     n, n, n, 
//     d_alpha, 
//     d_A, n, 
//     d_B, n, 
//     d_beta, 
//     d_C, n); 

    float d_AA[5*5]; 
    float d_BB[5]; 
// float d_X[5]; 

    for(int i=0;i<5;i++) 
    { 
     for(int j=0;j<5;j++) 
     { 
      if(i==j) 
      { 
       d_AA[i*5+j] = i; 
      }else 
      { 
       d_AA[i*5+j] = 0; 
      } 

     } 
     d_BB[i] = i*i; 
    } 

    status = cublasStbsv(cnpHandle, 
         CUBLAS_FILL_MODE_UPPER, 
         CUBLAS_OP_N, 
         CUBLAS_DIAG_NON_UNIT, 
         n,n, 
         d_AA, 
         5, 
         d_BB, 
         1); 

    for(int i=0;i<5;i++) 
    { 
      printf("B i %d %f \n",i,d_BB[i]); 
    } 

    cublasDestroy(cnpHandle); 

    *returnValue = status; 
} 

我不明白爲什麼我得到以下錯誤:

Starting /home/xavier/Bureau/Developpement/Cuda/build-Cuda_CUBLAS-Qt_5_6_0_gcc_64-Release/Cuda_CUBLAS...

simpleDevLibCUBLAS test running...
GPU Device 0: "GeForce GTX 750 Ti" with compute capability 5.0

Host and device APIs will be tested.
** On entry to SBSV parameter number 7 had an illegal value
B i 0 0.000000
B i 1 1.000000
B i 2 4.000000
B i 3 9.000000
B i 4 16.000000
!!!! CUBLAS Device API call failed with code 7

我不明白哪個函數我應該用它來解決我的線性方程 - cublasStpsvcublasStrs。有人能幫我嗎?

回答

1

tbsp()期望三角形帶狀矩陣; tpsv()期望以打包格式存儲三角矩陣;並且trsv()期望密集矩陣,並且僅使用上/下部分。

根據你的代碼,我認爲你需要trsv()

+0

我應該用什麼函數來求解線性方程,例如A = m * n B = m * 1和X = m * 1。在trsv()中,A必須是正方形的,我認爲? – user3262532

+0

@ user3262532這3個API在數學上彼此相同 - 都需要方陣,只有A的數據存儲方案不同。如果m> n,這是一個線性最小二乘擬合問題 - 這是一個數學問題,而不是編程問題。 – kangshiyin

+0

當你有更多的方程在你的方程中未知時,你怎麼能這樣做?有沒有一個函數用A不是正方形來解答A X = 0? – user3262532