博士阶段的研究应用了大量矩阵计算,现在要转到C++上来,一般的数值线性代数库都是采用Fortran编写的,用C++调用起来比较麻烦,boost.ublas和boost.bindings结合可以实现方便的调用。
boost.ublas是使用纯C++实现的BLAS的替代品,但不依赖于BLAS,接口友好,当然C++实现在效率上比BLAS就要差很远了。boost.bindings还没有正式纳入boost,现在在boost sandbox中,它提供了通过C++调用BLAS, LAPACK, ATLAS和UMFPACK的接口,通过Type Traits技术,这些接口可以接收boost.ublas的数据如ublas::matrix进行计算,使用起来十分方便。
boost.bindings源码下载地址,svn checkout
http://svn.boost.org/svn/boost/sandbox/boost/numeric/bindings/
boost.bindings文档和example
http://www.cs.colostate.edu/~nate/tutorial/bs-nb.tgz
GotoBlas编译
据说gotoblas是现在最快的BLAS,下载了最新的1.22版进行了编译,我的系统是windows,编译平台用的cygwin,备忘一点编译经验:
#pragma
comment(lib, "libgoto_core2-r1.22.lib")
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
#include
<
iostream
>
#include
<
memory
>
#include
<
boost
/
numeric
/
ublas
/
matrix.hpp
>
#include
<
boost
/
numeric
/
ublas
/
vector.hpp
>
#include
<
boost
/
numeric
/
ublas
/
io.hpp
>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
#include
<
boost
/
numeric
/
bindings
/
blas
/
blas.hpp
>
#include
<
boost
/
numeric
/
bindings
/
traits
/
ublas_matrix.hpp
>
#include
<
boost
/
numeric
/
bindings
/
traits
/
ublas_vector.hpp
>
#include
<
boost
/
numeric
/
bindings
/
traits
/
std_vector.hpp
>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
namespace
ublas
=
boost::numeric::ublas;
namespace
blas
=
boost::numeric::bindings::blas;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
int
main()
{
std::size_t n = 3;
ublas::matrix<double> A (n, n);
// fill matrix A
A(0, 0) = 3; A(0, 1) = 2; A(0, 2) = 1;
A(
boost.ublas是使用纯C++实现的BLAS的替代品,但不依赖于BLAS,接口友好,当然C++实现在效率上比BLAS就要差很远了。boost.bindings还没有正式纳入boost,现在在boost sandbox中,它提供了通过C++调用BLAS, LAPACK, ATLAS和UMFPACK的接口,通过Type Traits技术,这些接口可以接收boost.ublas的数据如ublas::matrix进行计算,使用起来十分方便。
boost.bindings源码下载地址,svn checkout
http://svn.boost.org/svn/boost/sandbox/boost/numeric/bindings/
boost.bindings文档和example
http://www.cs.colostate.edu/~nate/tutorial/bs-nb.tgz
GotoBlas编译
据说gotoblas是现在最快的BLAS,下载了最新的1.22版进行了编译,我的系统是windows,编译平台用的cygwin,备忘一点编译经验:
- 编译:解压后根据说明修改Makefile.rule中的STATIC_ALLOCATION = 1,make编译,编译时间长啊
- 生成dll:编译完成后进入exports目录,make dll
- 生成lib:根据def生成lib,打开vc9控制台,进入exports目录,lib /machine:i386 /def:文件名.def,即可生成vc可以链接的lib。
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)