2
我有矩陣的CSR
座標。與MKL的矩陣乘法
/* alloc space for COO matrix */
int *coo_rows = (int*) malloc(K.n_rows * sizeof(int));
int *coo_cols = (int*) malloc(K.n_rows * sizeof(int));
float *coo_vals = (float*) malloc(K.n_rows * sizeof(float));
/*Load coo values*/
int *rowptrs = (int*) malloc((N_unique+1)*sizeof(int));
int *colinds = (int*) malloc(K.n_rows *sizeof(int));
double *vals = (double*) malloc(K.n_rows *sizeof(double));
/* take csr values */
int job[] = {
2, // job(1)=2 (coo->csr with sorting)
0, // job(2)=1 (one-based indexing for csr matrix)
0, // job(3)=1 (one-based indexing for coo matrix)
0, // empty
n1, // job(5)=nnz (sets nnz for csr matrix)
0 // job(6)=0 (all output arrays filled)
};
int info;
mkl_scsrcoo(job, &n, vals, colinds, rowptrs, &n1, coo_vals, coo_rows, coo_cols, &info);
assert(info == 0 && "Converted COO->CSR");
現在我想用beta = 0;
/* function declaration */
void mkl_dcsrmm (char *transa, MKL_INT *m, MKL_INT *n, MKL_INT *k, double *alpha, char *matdescra, double *val, MKL_INT *indx, MKL_INT *pntrb, MKL_INT *pntre, double *b, MKL_INT *ldb, double *beta, double *c, MKL_INT *ldc);
應用mkl_dcsrmm
函數來計算C := alpha*A*B + beta*C
因爲現在我有。
int A_rows = ..., A_cols = ..., C_cols = ...
double alpha = 1.0;
mkl_dcsrmm ((char*)"N", &A_rows, &C_cols, &A_cols, &alpha, char *matdescra, vals, coo_cols, rowptrs, colinds , double *b, MKL_INT *ldb, double *beta, double *c, MKL_INT *ldc);
我在填寫輸入時遇到了一些困難。你能幫我填補其餘的投入嗎?
我想更詳細地瞭解一個具體的輸入是matdescra
。我從cspblas_ccsr
借了下面的代碼
char matdescra[6];
matdescra[0] = 'g';
matdescra[1] = 'l';
matdescra[2] = 'n';
matdescra[3] = 'c';
但我對此有一些疑問。我工作的矩陣A
不是三角形的,這個char數組的初始化讓你做出這樣的聲明,我應該如何配置matdescra
數組的參數?
感謝您的回覆。你能幫我填補剩下的參數嗎? – Thoth
@Thoth,是的,我添加了一個完整的示例。 – Unapiedra
@ Unapiedra謝謝。我想運行代碼,並確保我沒有任何問題:)。我會盡快將你的帖子標記爲答案。再次感謝! – Thoth