使用MKL+Eigen求解稀疏矩阵方程组

news/2024/7/21 3:57:16 标签: c++, 图像处理

问题:求解Ax=b的解,其中,A为大型稀疏矩阵,长和宽分别为1500^2。

一般思路:

(1)A为对称正定矩阵,对A使用cholesky分解。

(2)A为对称不定矩阵,使用LDL‘分解,即:

PAP'=LDL'

其中,L为单位下三角矩阵,D由阶数为1或者2的对角块构成,P是置换矩阵。

(3)不对称矩阵:LU分解。

(4)长方形矩阵(长>宽):QR分解或者两边同乘以A’,构建对称矩阵,即:

A'Ax=A'b

这里使用LU分解:

流程:

(1)安装MKL。

(2)新建VS工程,设置mkl并行,添加Eigen引用。

(3)头文件定义宏:#define EIGEN_USE_MKL_ALL 表示使用MKL加速。

(4)引入头文件:

#include <Eigen\Sparse> //稀疏矩阵

#include <Eigen\PardisoSupport> //mkl支持

(5)定义并赋值稀疏矩阵A和b。

(6)主函数相关设置:

#include <windows.h>

SYSTEM_INFO sysInfo;

GetSystemInfo(&sysInfo);

std::cerr << "CPU的数目是" << sysInfo.dwNumberOfProcessors << std::endl; //获取cpu的数目

Eigen::initParallel(); //初始化Eigen并行环境

mkl_set_dynamic(sysInfo.dwNumberOfProcessors); //使用mkl把所有的CPU给用上

(6)求解:

Eigen::PardisoLU<Eigen::SparseMatrix<imageDataType>> solver; //定义mkl求解器

solver.analyzePattern(A);

solver.factorize(A);

Eigen::SparseMatrix<imageDataType, Eigen::ColMajor> result = solver.solve(in); //求解结果

本机12核,对于一个(1500^2)*(1500^2)大小的double型矩阵,处理时间9秒。相比mkl加速前,快了3倍,不过领导对于计算时间还是不满意,要上GPU,用流式方法求解。加入后面能实现的话,再贴代码吧……


http://www.niftyadmin.cn/n/85652.html

相关文章

基于Spring Boot的校园志愿者服务网站

文章目录项目介绍主要功能截图&#xff1a;登录个人中心志愿者管理活动类型管理活动报名管理活动心得部分代码展示设计总结项目获取方式&#x1f345; 作者主页&#xff1a;Java韩立 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试…

JS基础之数据类型及类型检测

JS基础之数据类型及类型检测 前言&#xff1a;JavaScript的数据类型是我们必须要掌握的&#xff0c;几乎所有的JavaScript程序都会涉及某种形式的强制类型转换&#xff0c;处理这些情况时我们需要有充分的把握和自信。稍不留神&#xff0c;就会出现意想不到的结果。现在让我们…

宝塔搭建实战人才求职管理系统mobile手机端vue源码(五)

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 上一期给大家分享骑士cms会员管理member前端vue在本地运行打包、宝塔发布部署的方式&#xff0c;本期给大家分享&#xff0c;mobile移动端vue怎么在本地运行&#xff0c;打包&#xff0c;实现线上功能更新替换的方…

卷起来了,2023金三银四自动化测试面试题精选【字节二面】

面试一般分为技术面和hr面&#xff0c;形式的话很少有群面&#xff0c;少部分企业可能会有一个交叉面&#xff0c;不过总的来说&#xff0c;技术面基本就是考察你的专业技术水平的&#xff0c;hr面的话主要是看这个人的综合素质以及家庭情况符不符合公司要求&#xff0c;一般来…

知识库:在医疗行业的知识管理有着怎样的意义与实际影响?

知识库中还可存在一个通常被称作典型方法库的特殊部分。如果对于某些问题的解决途径是肯定和必然的&#xff0c;就可以把其作为一部分相当肯定的问题解决途径直接存储在典型方法库中。这种宏观的存储将构成知识库的另一部分。在使用这部分时&#xff0c;机器推理将只限于选用典…

论文解读 | [CVPR2019] 基于自适应文本区域表示的任意形状场景文本检测

目录 1 研究背景及意义 2 总体设计 3 方法论 3.1 自适应文本区域表示 3.2 文本建议 3.3 建议改进 4 损失函数 5 实验及结果 1 研究背景及意义 现有的场景文本检测方法使用固定点数的多边形来 表示文本区域。例如&#xff0c;水平文本使用2个点(左上/右下)表示文本区域&…

b站B导的yoloV7版本添加注意力机制

视频参考&#xff1a;【Pytorch 图像处理中注意力机制的代码详解与应用&#xff08;Bubbliiiing 深度学习 教程&#xff09;】 yolov7博客参考&#xff1a;睿智的目标检测61——Pytorch搭建YoloV7目标检测平台注意力机制介绍&#xff1a;神经网络学习小记录64——Pytorch 图像处…

风储VSG-基于虚拟同步发电机的风储并网系统MATLAB仿真

MATLAB2021b版本仿真模型&#xff1a;风力发电机模块、储能控制模块、功率计算模块、VSG控制模块、电压电流双环控制模块。永磁同步风机输出功率、储能系统输出功率以及逆变器输出功率曲线。直流母线电压波动曲线。逆变器输出电压、电流曲线。完整模型见博主资源&#xff01;&a…