编译准备:
- 安装MinGW-W64 (http://sourceforge.net/projects/mingw-w64/)
安装选项如下
- 安装msys (http://www.mingw.org/wiki/msys, 注意下载msys,不要下载mingw),按照提示使msys找到MinGW-W64的安装目录
- 下载
blas (http://www.netlib.org/blas/)
lapack(http://www.netlib.org/lapack/)
metis4.0.1 (http://glaros.dtc.umn.edu/gkhome/metis/metis/overview,注意版本必须是4.0.1)
SuiteSparse 4.4.4 (http://faculty.cs.tamu.edu/davis/suitesparse.html)
- 安装显卡驱动与最新的CUDA (不需要编译CHOLMOD with GPU者跳过这一步)
编译(without GPU)
- 编译BLAS,blas的编译很简单,打开msys,到BLAS目录直接make就可以了。
- 编译LAPACK,lapack依赖与BLAS,将make.inc中的:
BLASLIB = ../../librefblas.a 修改成第一步编译出来的blas_LINUX.a的路径, 然后make。可能会报错,但只要liblapack.a出来了就可以了。
- 编译Metis-4.0.1,将Metis中的 Makefile.in 中 CC = cc 改为 CC = gcc,OPTFLAGS = O2 改为 OPTFLAGS = O3. 然后make
- 编译SuiteSparse, 打开 SuiteSparse_config/ SuiteSparse_config.mk,修改BLAS and LAPACK configuration: 后面的 BLAS 和 LAPACK 路径,使BLAS = blas_LINUX.a路径 –lgfortran; LAPACK = liblapack.a路径;将
# CC = gcc
# CF = $(CFLAGS) -O3 –fexceptions
的注释取消. 然后在SuiteSparse目录下make,我们大部分要用的lib都会出来,在各个文件夹里。
编译(with GPU)
GPU的编译和上面类似,第4步不一样,我们需要单独用Visual Studio编译 cholmod_gpu_kernels.cu 文件, 然后把编译出来的obj改名为cholmod_gpu_kernels.o,粘贴到CHOLMOD/LIB下。
将t_cholmod_gpu.c中的两个函数改为Windows下可以识别的:
feenableexcept (FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW );这个函数在windows下不能用,是用来确定奇异数的返回信号的,如2.0/0,我们只能把他注释掉。
qsort ( scores, n_descendant, sizeof(struct cholmod_descendant_score_t),
(__compar_fn_t) CHOLMOD(score_comp) );这个函数在stdlib.h里,windows下没有对__compar_fn_t进行声明,我们在这行代码之前需要加上typedef int (*__compar_fn_t )(const void*,const void*) ; 。