MKL 函数 pdgemv 用于执行双精度精度的矩阵向量乘法。其函数原型为:

void pdgemv(char trans, int m, int n, double alpha, const double *a, int lda, const double *x, int incx, double beta, double *y, int incy);

函数参数解释如下:

  • trans:指定矩阵 a 的转置方式,取值为'N'、'T'或'C',分别表示不转置、转置和共轭转置。
  • m:矩阵 a 的行数。
  • n:矩阵 a 的列数。
  • alpha:标量乘数。
  • a:指向矩阵 a 的存储位置。
  • lda:矩阵 a 的列宽。
  • x:指向向量 x 的存储位置。
  • incxx 中相邻元素之间的间隔。
  • beta:标量乘数。
  • y:指向向量 y 的存储位置。
  • incyy 中相邻元素之间的间隔。

函数功能:执行矩阵向量乘法计算 y = alpha * A * x + beta * y

注意事项:

  • 矩阵 a 在存储时需要按列存储,也就是说,第一列元素存储在 a[0]a[m-1],第二列元素存储在 a[m]a[2*m-1],以此类推。
  • incxincy 可以为负值,表示 xy 的存储顺序与 a 不同。

示例代码:

#include <mkl.h>
#include <stdio.h>

int main()
{
    const int m = 3;
    const int n = 2;
    const int lda = m;
    const int incx = 1;
    const int incy = 1;
    double a[m*n] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
    double x[n] = {1.0, 2.0};
    double y[m] = {0.0, 0.0, 0.0};
    const double alpha = 1.0;
    const double beta = 0.0;
    char trans = 'N';
    pdgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy);
    for (int i = 0; i < m; i++)
    {
        printf("y[%d] = %.2f\n", i, y[i]);
    }
    return 0;
}

该示例代码执行矩阵向量乘法计算 y = A * x。其中,矩阵 A 为:

1.0 4.0
2.0 5.0
3.0 6.0

向量 x 为:

1.0
2.0

计算结果为:

y[0] = 5.00
y[1] = 11.00
y[2] = 17.00

原文地址: https://www.cveoy.top/t/topic/onOl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录