GNU Scientific Library是一个用于科学计算的开源库,拥有丰富的数学及矩阵计算函数,但是其自带的矩阵计算库BLAS效率明显没有ATLAS、OpenBLAS等优化后的计算库高,本文主要介绍如何在GSL中链接OpenBLAS库。
编译OpenBLAS非常简单,只需要安装好mingw32或者mingw64,配合msys搭建好类unix的编译环境,然后cd到OpenBLAS的源码根目录下:
成功后:
注意在目前最新的0.28版中,USE_OPENMP=1在WIN64平台上貌似有错误,lapack_tesing无法通过
1. 下载并编译OpenBLAS库
OpenBLAS库最早是老外开发的GotoBLAS库,使用了大量的内联汇编来匹配不同计算平台的硬件差异,在Goto放弃更新GotoBLAS库后,中科院软件所的一帮人负责起了更新,并改名OpenBLAS,网址: https://github.com/xianyi/OpenBLAS编译OpenBLAS非常简单,只需要安装好mingw32或者mingw64,配合msys搭建好类unix的编译环境,然后cd到OpenBLAS的源码根目录下:
make BINARY=64 USE_OPENMP=1 USE_THREAD=1
成功后:
make install PREFIX="path to install"
注意在目前最新的0.28版中,USE_OPENMP=1在WIN64平台上貌似有错误,lapack_tesing无法通过
cd lapack-netlib
make lapack_testing
2. 下载并编译GSL库
a. 下载GSL源码
地址:http://www.gnu.org/software/gsl/
b. 下载VS2012版GSL工程
地址:http://brgladman.org/oldsite/computing/gnu_scientific_library.php
解压GSL源码文件,并将VS2012版工程文件解压到GSL源码的根目录下
本文中使用的是VS2010,只需把VS2012工程中的
<PlatformToolset>v110</PlatformToolset>全部替换为
<PlatformToolset>v100</PlatformToolset>即可。
c. 用OpenBLAS库编译GSL库
打开build.vc11目录下的gsl.dll.sln,首先编译gslhdrs,这个是VS2012版工程作者写的给GSL添加导出函数的软件包。
然后将步骤1中编译好的libopenblas.lib和libopenblas.dll放入dll/x64/release目录中,并将gsl库的链接依赖从cblas.lib改为libopenblas.lib
编译后得到的gsl.lib和gsl.dll即为所需的GSL库
3. 测试
a. 测试代码1
#include <stdio.h>
#include <gsl/gsl_cblas.h>
#pragma comment (lib, "libopenblas.lib")
//#pragma comment (lib, "gsl.lib")
typedef struct { float real; float imag; } CBLAS_TEST_COMPLEX;