MKL 矩阵向量乘法: 使用 cblas_dgemv 函数实现
在 MKL 中,可以使用以下函数实现矩阵向量乘法操作:
void cblas_dgemv(const CBLAS_LAYOUT layout, const CBLAS_TRANSPOSE trans, const MKL_INT m, const MKL_INT n, const double alpha, const double *a, const MKL_INT lda, const double *x, const MKL_INT incx, const double beta, double *y, const MKL_INT incy);
其中,参数含义如下:
layout:指定矩阵的存储方式,可以取值为CblasRowMajor或CblasColMajor;trans:指定矩阵是否需要转置,可以取值为CblasNoTrans或CblasTrans;m和n:分别表示矩阵的行数和列数;alpha:表示矩阵和向量相乘时的系数;a:表示矩阵的数据存储地址;lda:表示矩阵每一行元素的存储间隔;x:表示向量的数据存储地址;incx:表示向量元素之间的存储间隔;beta:表示结果向量的系数;y:表示结果向量的数据存储地址;incy:表示结果向量元素之间的存储间隔。
例如,下面的代码片段实现了一个3x3矩阵和一个长度为3的向量相乘的操作:
#include <mkl.h>
int main() {
  double a[9] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};
  double x[3] = {1.0, 2.0, 3.0};
  double y[3] = {0.0, 0.0, 0.0};
  cblas_dgemv(CblasRowMajor, CblasNoTrans, 3, 3, 1.0, a, 3, x, 1, 0.0, y, 1);
  for (int i = 0; i < 3; i++) {
    printf('%f ', y[i]);
  }
  printf('
');
  return 0;
}
输出结果为:
14.000000 32.000000 50.000000
原文地址: https://www.cveoy.top/t/topic/onIn 著作权归作者所有。请勿转载和采集!