2016-06-09 4 views
0

내 CUDA 커널에서 cublasStbsv 함수를 사용하여 방정식을 풀려고합니다.CUDA 커널에서 cublasStbsv 사용

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

이해가 안 내 선형을 해결하기 위해 사용 하죠 기능 : 나는 다음과 같은 오류를 얻을 수있는 이유 이해가 안

__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; 
} 

다음과 같이 커널 코드는 방정식 - cublasStpsv 또는 cublasStrs. 누군가 나를 도울 수 있습니까?

답변

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 X = 0을 풀 수있는 함수가 있습니까? – user3262532

관련 문제