I want using sparse matrix multiplication. I have a diagonal matrix "A" and I considered it as a sparse matrix and a dense matrix B.
C = A * B ;
now I'm using a intel mkl sparse BLAS. I read user guide mkl and I understand for multiplication a sparse diagonal matrix in a dense matrix I must use mkl_ddiamm(...) function.
as a guide see this link
http://www.qft.iqfr.csic.es/docs/intel/mkl/mkl_manual/bla/bla_SBLAS2-3_naming.htm .
This function have many parameter but I find out them.
mkl_ddiamm(&transa, &m, &n, &k, &alpha, matdescra, val, &lval, idiag, &ndiag, b, &ldb, &beta, c, &ldc);
for details see this link http://www.qft.iqfr.csic.es/docs/intel/mkl/mkl_manual/bla/functn_mkl_ddiamm.htm
my question is what is format of "val" , "b" , "c" .
for example
aim: A = [ 1 , 0 , 0 0 , 2 , 0 0 , 0 , 3 ] B = [ 1 , 4 2 , 5 3 , 6 ] C = A * B
CODE IS :
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;
now how I call "val" , "b" , "c" ?
I use this below but I get wrong answer:
mkl_ddiamm(&transa, &m, &n, &k, &alpha, matdescra, &(val[0][0]), &lval, idiag, &ndiag, &(b[0][0]), &ldb, &beta, &(c[0][0]), &ldc);
I use this below and get error:
mkl_ddiamm(&transa, &m, &n, &k, &alpha, matdescra, &val, &lval, idiag, &ndiag, &b, &ldb, &beta, &c, &ldc);
now Is correct my format of making matrices "val" , "b" , "c" , according to "A" and "B"? and How I call them?