intel mkl稀疏blas(矩阵乘法)

时间:2014-12-20 15:57:40

标签: c++ matrix-multiplication sparse-matrix intel-mkl diagonal

我想使用稀疏矩阵乘法。我有一个对角矩阵" A"我认为它是一个稀疏矩阵和一个密集矩阵B. C = A * B;
现在我使用的是intel mkl稀疏BLAS。我阅读了用户指南mkl,我理解乘法在密集矩阵中的稀疏对角矩阵我必须使用mkl_ddiamm(...)函数。
作为指南,请看这个链接 http://www.qft.iqfr.csic.es/docs/intel/mkl/mkl_manual/bla/bla_SBLAS2-3_naming.htm
这个功能有很多参数,但我发现它们 mkl_ddiamm(& transa,& m,& n,& k,& alpha,matdescra,val,& lval,idiag,& ndiag,b,& ldb,& beta,c,& LDC);
有关详细信息,请参阅此链接http://www.qft.iqfr.csic.es/docs/intel/mkl/mkl_manual/bla/functn_mkl_ddiamm.htm 我的问题是" val"的格式是什么? ," b" ," c"点。

例如

aim:
A = [ 1 , 0 , 0 
      0 , 2 , 0 
      0 , 0 , 3 ]
B = [ 1 , 4 
      2 , 5 
      3 , 6 ]
C = A * B

代码是:

double val[3][1] = {1,2,3};
double b[3][2] = {1,4,2,5,3,6};
double c[3][2];
int m = 3;
int k = 3;
int n = 2;
double alpha = 1;
double beta = 0;
char matdescra[6];
matdescra[0] = 'd';
matdescra[1] = 'u';
matdescra[2] = 'n';
matdescra[3] = 'c';
char transa = 'n';
int lval = 3; // dimension of val
int ndiag = 1; // number of non-zero diagonal
int idiag[1] = {0}; //distance
int ldb = 3;
int ldc = 3;

现在我打电话给" val" ," b" ," c" ?
我在下面使用这个,但我得到了错误的答案:

mkl_ddiamm(&transa, &m, &n, &k, &alpha, matdescra, &(val[0][0]), &lval, idiag, &ndiag, &(b[0][0]), &ldb, &beta, &(c[0][0]), &ldc);

我在下面使用此内容并收到错误:

mkl_ddiamm(&transa, &m, &n, &k, &alpha, matdescra, &val, &lval, idiag, &ndiag, &b, &ldb, &beta, &c, &ldc);

现在是正确的制作矩阵的格式" val" ," b" ," c" ,根据" A"和" B"?我怎么称呼它们?

0 个答案:

没有答案