C语言 Mkl 矩阵乘法,Visual Studio下实现Eigen+Intel MKL的矩阵乘法

科学计算过程中经常会用到线性代数运算,尤其是矩阵乘法,自己手写的C++代码想要赶上MATLAB几乎是不可能的。在C++中,谈到高性能计算就往往要用Intel MKL,但是用过的人都知道,这东西烦人的很,函数风格也怪异,不好用,一个简单的矩阵乘法函数dgemm的参数列表就老长老长。Eigen是一个相对来说十分优雅和好用的线性代数运算库(尤其是在Windows下,Blas,Lapack太麻烦,基本不考虑),缺点就是密集型计算“不那么快”。

所以,如果既能有Intel MKL的速度,又能有Eigen的优雅,还是在Windows下,那真真是极好的。

操作系统:Windows 7 64位

安装Visual Studio 2013

下载C++下的一个线性代数运算库Eigen并解压:http://eigen.tuxfamily.org/index.php?title=Main_Page

安装Intel Parallel Studio XE 2015

在Visual Studio下配置Eigen。假设Eigen解压在D:\Local\eigen下,则在项目属性中的“配置属性”下的“C/C++”面板中将“附加包含目录”设置为D:\Local\eigen

111634338_1_20170922061835574

写代码

#define EIGEN_USE_MKL_ALL

#define EIGEN_VECTORIZE_SSE4_2

#include

#include

#include

#include

using namespace std;

using namespace Eigen;

// 使用Eigen+Intel MKL

int main(int argc, char *argv[])

{

MatrixXd a = MatrixXd::Random(3000, 3000); // 随机初始化矩阵

MatrixXd b = MatrixXd::Random(3000, 3000);

double start = clock();

MatrixXd c = a * b; // 乘法好简洁

double endd = clock();

double thisTime = (double)(endd - start) / CLOCKS_PER_SEC;

cout << thisTime << endl;

system("PAUSE");

return 0;

}1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

“#define EIGEN_USE_MKL_ALL”这句宏定义就表示在Eigen上用了Intel MKL进行计算优化,当然,其他头文件也是不能少的。

“#define EIGEN_VECTORIZE_SSE4_2”这句表示采用SSE4.2浮点数优化,不用也可。

选择“Release”,“x64”模式进行生成(编译)

111634338_2_20170922061835949

计算两个3000*3000的double型密集矩阵相乘

使用Eigen+Intel MKL的运行时间:0.736秒!!!已经相当快了

111634338_3_20170922061836324

不用Intel MKL,只用Eigen,运行时间:4.28秒

111634338_4_20170922061836574

MATLAB下运行时间:0.6788秒。果然还是无法超越,只是差不多能赶上它了

111634338_5_20170922061836746

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值