---
title: Eigen库使用KML
description: "Eigen库是一个用于线性代数运算的C++模板库。它提供了高性能的矩阵运算和线性代数操作，被广泛应用于科学计算、机器学习和计算机图形学等领域。详细介绍可参考Eigen官网(https://eigen.tuxfamily.org/index.php?title=Main_Page)。Eigen库官方提供了使能开源BLAS以及LAPACK的方式，同样可以使用到KML中的BLAS与LAPACK库，相比开源Eigen提供了更高性能的矩阵运算接口。除了标准的BLAS、LAPACK接口，鲲鹏数学库提供了额外的BLAS接口供Eigen使用，详细接口信息请参见KML_BLAS like extensions(https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2300/accel/kunpengaccel_kml_16_0185.html)。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2300/accel/kunpengaccel_12_0067.html
sourcePath: /source/zh/kunpengboostkithistory/2300/accel/kunpengaccel_12_0067.html
indexId: 85eae377e2fba3e706ffa883f522bcb5adb552b30adb826a01715ecfb1d3b27a70
---
# Eigen库使用KML

#### Eigen库介绍

Eigen库是一个用于线性代数运算的C++模板库。它提供了高性能的矩阵运算和线性代数操作，被广泛应用于科学计算、机器学习和计算机图形学等领域。详细介绍可参考Eigen官网(https://eigen.tuxfamily.org/index.php?title=Main_Page)。Eigen库官方提供了使能开源BLAS以及LAPACK的方式，同样可以使用到KML中的BLAS与LAPACK库，相比开源Eigen提供了更高性能的矩阵运算接口。除了标准的BLAS、LAPACK接口，鲲鹏数学库提供了额外的BLAS接口供Eigen使用，详细接口信息请参见KML_BLAS like extensions(https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2300/accel/kunpengaccel_kml_16_0185.html)。


#### 安装Eigen库

1. 下载最新Eigen库（Eigen-3.4.0）。
  下载地址：Eigen官网(https://eigen.tuxfamily.org/index.php?title=Main_Page)

2. 获取压缩包后解压即安装成功。


#### Eigen库应用

方式一：由于Eigen库只包含头文件，只需将解压后的文件夹放在工程目录下后引用需要的头文件即可。

方式二：进入解压后的文件夹，进行编译。

1. 编译并安装Eigen。

```
mkdir build
cd build
cmake ..
sudo make install
```


2. 检查是否安装成功，可以编译以下示例代码。

  a. 新建hello_eigen.cpp文件。

```
vi hello_eigen.cpp
```


  b. 按“i”进入编辑模式，在文件中添加以下内容。

```
// hello_eigen.cpp
#include <iostream>
#include <eigen3/Eigen/Dense>
using Eigen::MatrixXd;
int main(){
MatrixXd m(2,2);
m(0,0) = 3;
m(1,0) = 2.5;
m(0,1) = -1;
m(1,1) = 1;
std::cout << m << std::endl;
}
```


  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
  d. 执行编译。

```
g++ hello_eigen.cpp -o hello_eigen
```


    编译成功后输出为内容如下所示。

```
3  -1
2.5 1
```


#### Eigen库使能KML_BLAS

1. 获取eigen_kml.patch文件。
  下载地址：eigen_kml.patch(https://gitee.com/openeuler/kml_adapter/tree/master/eigen_adapter)

2. 将获取到的patch文件放至解压后的文件夹中，并合入此patch。

```
patch -p1 <eigen_kml.patch
```


3. 合入patch成功后执行编译命令。

```
g++ -I./ your_app.cpp -O2 -o your_app -L/usr/local/kml/lib/kblas/nolocking/ -lkblas -lklapack_full -fopenmp -DKUNPENG_USE
```
