前言

在用C/C++编写模型预测控制算法(MPC)的代码时候,由于预测步长和控制步长的设置较大,导致在利用eigen库进行矩阵计算的时候,矩阵n次幂计算时间过长,导致MPC算法难以落地。因此,如何减少MPC的计算时间就显得尤为重要。在我的实践过程中,我对MPC算法进行了两次速度上的提升,当时的预测步长是40,控制步长是15,然后利用osqp-eigen库求解二次规划的(c++的二次规划求解器不是本文章重点)。计算一次的时间是0.12秒,显然不够用,后来在MPC算法中加入了矩阵快速幂的算法,将速度提升到了0.06秒左右,显然还是不够,最后没辙了,将预测步长改为15,控制步长改为5(我记得是这样),计算一次的时间变为了0.005秒左右。然后了解到英特尔公司的MKL库可以对eigen库的矩阵运算加速,实现了对MPC算法的第二次提速。本文将介绍在Linux系统下,MKL库如何部署到电脑上,并用cmake编译器进行编译。


提示:因为本文章用MKL库对eigen库的矩阵运算进行加速,所以这边建议读者您先把eigen库安装到自己的电脑上,eigen库的安装链接如下
eigen库安装教程

一、MKL库的下载

MKL库的百度云链接如下(大概700M左右),只是2018版本,如果读者找到新的版本可以留言,我懒得找了。
2018版本的MKL库


二、MKL库的安装与配置

1.MKL库的安装与配置

下载并解压安装包之后,进入到安装包,然后执行如下命令:

$   ./install.sh 

接下来就按照引导进行安装:

图1
图1
此处建议跟我选择的一样,即选择1选项;
并输入你的密码。
请添加图片描述
图2
按回车健
请添加图片描述
图3

连续按几次空格
请添加图片描述
图4
输入accept并回车。
请添加图片描述
图5
请添加图片描述
图6
选择1选项
请添加图片描述
图7
选择1选项
请添加图片描述
图8
按回车
请添加图片描述
图9
然后执行以下指令

$  /opt/intel/mkl/bin/mklvars.sh intel64 mod

2.代码测试

测试代码下载
该测试代码源于该位博主,感谢他的分享,他的相关博客链接点击此,因为该位博主的文件直接用g++编译器进行编译,而我这边使用cmake编译器对代码工程进行管理,只有此处不同。

Cmakelist.txt文件如下配置:

cmake_minimum_required(VERSION 3.0.2) #cmake最低要求版本
project(TestMKL)    #工程名字

#头文件的搜索路径
include_directories(
                     /opt/intel/mkl/include/     
                     include  #-------/usr/local/include路径
                     )                    
#库的搜索路径
link_directories(/opt/intel/mkl/lib/intel64 
                 /opt/intel/lib/intel64)
                 
#生成可执行程序:mkl_test
add_executable(mkl_test      
               mkl_test.cpp)
               
#将库链接到可执行程序:mkl_test              
target_link_libraries(mkl_test 
                      libmkl_rt.so 
                      pthread
                      libm.so
                      libdl.so
                      )

拿到测试代码后,进入mkl_ws,并打开终端,执行以下指令:

$ cmake .
$ make
$ ./mkl_test

注意:如果编译报错说找不到头文件啥的,这个情况一般是eigen的文件里面找不到MKL库的头文件,只需要把MKL库里面的头文件的绝对路径添加上去就行


总结

值得注意的是,在使用MKL库时,电脑最好是搭载了英特尔公司的cpu。
1:因为我自身的电脑是AMD的cpu,在使用MKL库的时候,上面的测试代码在使用MKL库的时候,计算时间是0.38秒,不使用MKL库的计算时间是8.7秒。
2:而实验室的电脑cpu是酷睿i7,同一个代码在使用MKL库的时候,酷睿i7的计算时间是0.058,不使用MKL库的计算时间是6.21秒。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐