Я хочу использовать редкое матричное умножение. У меня есть диагональная матрица «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, &м, &п, &к, &альфа, матдескра, вал, &lval, idiag, &ndiag, б, &БОД, &бета, с, &LDC);
подробности смотрите по этой ссылке http://www.qft.iqfr.csic.es/docs/intel/mkl/mkl_manual/bla/functn_mkl_ddiamm.htm
мой вопрос, что такое формат «val», «b», «c».
например
цель: 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»? и как я их называю?
Задача ещё не решена.