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