#include
#include
#include
#include
#define NA (5)
void do_dgemm(int M, int N, int K, const float* A, int lda, float* B, int ldb, float* C, int ldc);
void initMatrix(float* A, int dim, int seed);
void printVector(const char* log, int* Vector, int size);
int printMatrix(char* matrixName, int m, int n, float* a_matrix, int lda);
int cpublasSmatinv(int N, float *A, int lda, float *Ainv, int lda_inv, int *info);
//int cpublasSmatinvBatched(int N, const float *A[], int lda, float *Ainv[], int lda_inv, int *info, int batchSize);
int cpublasSmatinvBatched(int N, const float *A, int lda, float *Ainv, int lda_inv, int *info, int batchSize){
float* slb_A = NULL;
slb_A = (float*)malloc(N*N*sizeof(float));
for(int i=0; imaxA){
maxA = absA;
imax = k;
}
}
if (maxA == 0.0f) {
*info = i+1;
return i+1;//0; //failure, matrix is degenerate
}
1.1.2 exchange rows///
if (imax != i) {//先交换ipiv中的行号,再交换第i行和第imax行的全部元素;
//pivoting Pivot
Pivot[i] = imax+1;
//pivoting rows of A
for(int exchIndex=0; exchIndex=0; i--){
float sigma = 0.0;
for(int k=i+1; k<=j; k++){
//B[i + j*ldb] += A_LU[i + k*lda] * B[k + j*ldb]; // V(i,j) = - ∑ U(i,k)*V(k,j) / U(i,i) , k= i+1, ... ,j
sigma += A[i + k*lda] * B[k + j*ldb];
}
//B[i + j*ldb] *= (-1.0 * B[i + i*ldb]);
B[i + j*ldb] = -sigma / A[i + i*ldb]; /
printMatrix("U'", N, N, B, N);//help debug kernel
for(int j=N-2; j>=0; j--){//B(i,j) = U(i,j) - sigma(B(i,k)*L(k,j)) k= j+1, j+2, ... , N
for(int i=0; i=0; j--){
jp = Pivot[j]-1;
if(jp != j){
for(int i=0; i