MKL库: cblas_dgemv

#include "mkl.h"
#include <stdio.h>
#include <iostream>
using namespace std;

int  main()
{
	int i = 0;
	double A[6] = { 1.0, 2.0, 1.0, -3.0, 4.0, -1.0 };
	double b[2] = { 1.0, 2.0};
	double a[3] = { 0.0 };

	//在列展开下,不管A是否转置,lbda:A矩阵的行数
    //在行展开下,不管A是否转置,lbda:A矩阵的列数

	/*按列主序展开*/
	//1、无转置
	cout << "按列主序展开,无转置:" << endl;
	cblas_dgemv(CblasColMajor, CblasTrans, 2, 3, 1.0, A, 2, b, 1, 0.0, a, 1);
	for (i = 0; i <3; i++)
		printf("%lf ", a[i]);
	printf("\n");
	/*A = [1.0  1.0  4.0; 2.0 -3.0 -1.0];
	  A'= [1  2; 1 -3; 4 -1];  //和矩阵间的乘法不同,此处表示A的转置
	  a = A'* b */

	//2、转置
	cout << "按列主序展开,转置:" << endl;
	cblas_dgemv(CblasColMajor, CblasNoTrans, 3, 2, 1.0, A, 3, b, 1, 0.0, a, 1);
	for (i = 0; i < 3; i++)
		printf("%lf ", a[i]);
	printf("\n");
	/*A = [1.0  -3.0; 2.0  4.0; 1.0  -1.0];
      a = A * b */

	cin.get();

}

结果:

将注释部分的表达式代入matlab 中计算结果与上述一致。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cblas_dgemm是一个基于BLAS(Basic Linear Algebra Subprograms)的矩阵乘法函数,用于计算两个矩阵的乘积。以下是cblas_dgemm的源代码及解析: ``` void cblas_dgemm( const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE TransA, const CBLAS_TRANSPOSE TransB, const MKL_INT M, const MKL_INT N, const MKL_INT K, const double alpha, const double *A, const MKL_INT lda, const double *B, const MKL_INT ldb, const double beta, double *C, const MKL_INT ldc) ``` 参数解析: - Layout:指定矩阵数据的存储格式,可以是CblasRowMajor或CblasColMajor。 - TransA:指定是否需要对矩阵A进行转置操作,可以是CblasNoTrans或CblasTrans。 - TransB:指定是否需要对矩阵B进行转置操作,可以是CblasNoTrans或CblasTrans。 - M:指定矩阵C的行数。 - N:指定矩阵C的列数。 - K:指定矩阵A和矩阵B的公共维数。 - alpha:指定矩阵A与矩阵B的乘积的缩放因子。 - A:指向矩阵A的首地址。 - lda:指定矩阵A的列数。 - B:指向矩阵B的首地址。 - ldb:指定矩阵B的列数。 - beta:指定矩阵C的缩放因子。 - C:指向矩阵C的首地址。 - ldc:指定矩阵C的列数。 cblas_dgemm的实现采用了通用矩阵乘法算法(GEMM),具体实现细节详见BLAS的文档。通用矩阵乘法算法的核心思想是将矩阵的乘法拆分成多个向量的乘积,以加速计算。在BLAS中,通用矩阵乘法算法的实现包括了多种优化策略,如缓存优化、向量化优化等,可以在不同架构的计算机上达到较好的性能表现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值