文档章节

Eigen + SuperLU + BLAS 计算配置

鼹鼠的烦恼
 鼹鼠的烦恼
发布于 2014/08/17 13:50
字数 740
阅读 255
收藏 1

Eigen 是一个线性算术的C++模板库,包括:vectors, matrices, 以及相关算法。功能强大、快速、优雅以及支持多平台。本人在应用中主要使用其稀疏矩阵及其相应的线性运算的接口,其内部实现了效率不是很高的SparseLU计算接口,同时还开放了多个外部库的计算接口:

  • CholmodSupport module

  • MetisSupport module

  • PardisoSupport module

  • PaStiXSupport module

  • SuiteSparseQR module

  • SuperLUSuppot module

  • UmfPackSupport module

由于计算效率原因需要采用SuperLU接口方式计算A*x=b线性方程组的计算。

配置环境为 Window 7 + MSVC2010

库文件主页:

  • Eigen 3.2.2 : http://eigen.tuxfamily.org/index.php?title=Main_Page

  • SuperLU 4.3 : http://crd-legacy.lbl.gov/~xiaoye/SuperLU/

主要过程及注意点如下:

  1. 编译SuperLU库

    1) 新建工程A(命名SuperLU),将**\SuperLU_4.3\SRC中头文件和源文件添加到工程文件目录中;

    2) 然后在工程 右击 -> 属性 -> 配置属性 -> general -> Configeration Type -> 选择 static Library(.lib),单击创建。或者在建立工程的时候选择直接创建静态库;

    3) 将文件夹**\SuperLU_4.3\SRC添加到 项目 -> 属性 -> C/C++ -> 常规 -> 附加包含目录;

    4) 在Debug模式调试编译

    5)无error后生成Release版本

    这时在工程的Release文件夹下即已经生成lib文件,便是SuperLU用到的静态链接库。

  2. 编译BLAS库

    由于SuperLU需要调用BLAS库中的一些函数,所以需要编译BLAS库。SuperLU官网上说BLAS库速度不快,推荐使用Intel MKL、ATLAS、GotoBLAS。为方便仅以SuperLU下载文件中附带的CBLAS文件夹下的BLAS为例编译,BLAS的编译与前者SuperLU类似。

    1) 新建工程B(命名BLAS),将CBLAS文件夹下的头文件和源文件添加到工程文件目录中,然后将工程属性改为Static Library(.lib)。

    2) 将**\SuperLU_4.3\CBLAS添加到 项目 -> 属性 -> C/C++ -> 常规 -> 附加包含目录;

    3) 在Debug模式下调试编译,成功后生成Release版本。

    注:我在这里一直出错,根本不能编译通过。后来查看了CBLAS下的slu_Cnames.h文件,其内容为

    ../SRC/slu_Cnames.h 。实际上表示CBLAS目录下的slu_Cnames.h文件指向SRC目录下的同名头文件,我直接将SRC/slu_Cnames.h文件复制至CBLAS目录下,重新编译则成功通过。其实也不太清楚为什么此前的文件为什么会编译错误。

  3. Eigen中采用SuperLU

    在**\SuperLU_4.3\SRC添加至工程 附加包含目录 中,将SuperLU.lib和BLAS.lib文件所在目录添加至 项目 -> 属性 -> 链接器 -> 常规 -> 附加库目录;在 项目 -> 属性 -> 链接器 -> 输入 -> 附加依赖项 中添加 SuperLU.lib 和 BLAS.lib;

在使用Eigen的文件中需要包含 #include <Eigen/SuperLUSupport> 即可采用类似SparseLU的方法调用SuperLU了。


参考文章:

【1】 SuperLU使用总结 http://blog.csdn.net/gindar/article/details/8010794




© 著作权归作者所有

鼹鼠的烦恼
粉丝 1
博文 2
码字总数 1274
作品 0
南京
程序员
私信 提问
Eigen 3.2 发布,线性算术的C++模板库

Eigen 3.2 发布了,Eigen 是一个线性算术的C++模板库,包括:vectors, matrices, 以及相关算法。功能强大、快速、优雅以及支持多平台。 示例代码: 主要新特性包括: a built-in supernodal ...

oschina
2013/08/11
801
0
VS下配置Eigen库

Eigen是一个C++模板库用于线性代数方面的计算。 我们从http://eigen.tuxfamily.org/in...找到Eigen库的最新版本下载后解压到某个目录比如: 在properties中的C/C++选项中找到Additional Incl...

superPershing
2017/03/11
0
0
OpenBLAS 0.2.14 发布,高性能多核 BLAS 库

OpenBLAS 0.2.14 版本主要更新如下: 支持AMD Streamroller 增加ARM Cortex-A9和Cortex-A15目标 增加 openblas_get_num_threads 和 openblas_get_num_procs 函数接口 增加 ATLAS扩展风格的 ...

xianyi
2015/03/25
1K
0
Ceres Solver: 高效的非线性优化库(一)

Ceres Solver: 高效的非线性优化库(一) 注:本文基于Ceres官方文档,大部分由英文翻译而来。可作为非官方参考文档。 简介 Ceres,原意是谷神星,是发现不久的一颗轨道在木星和火星之间“矮...

小狮子
05/28
0
0
高性能多核 BLAS 库--OpenBLAS

OpenBLAS 是一个优化的 BLAS 库,基于 GotoBLAS2 1.13 BSD 版本。 BLAS(Basic Linear Algebra Subprograms 基础线性代数程序集)是一个应用程序接口(API)标准,用以规范发布基础线性代数操...

xianyi
2012/04/08
12.1K
0

没有更多内容

加载失败,请刷新页面

加载更多

查看线上日志常用命令

cat 命令(文本输出命令) 通常查找出错误日志 cat error.log | grep 'nick' , 这时候我们要输出当前这个日志的前后几行: 显示file文件里匹配nick那行以及上下5行 cat error.log | grep -C ...

xiaolyuh
31分钟前
5
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
37分钟前
5
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
44分钟前
6
0
flutter 剪切板 复制粘贴

复制粘贴功能 import 'package:flutter/services.dart'; Clipboard.setData(ClipboardData(text:_text));Clipboard.getData;...

zdglf
47分钟前
4
0
如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?

面试题 如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题? 面试官心理分析 这个是肯定的,用 MQ 有个基本原则,就是数据不能多一条,也不能少一条,不能多,就是前面说的重复消费...

米兜
47分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部