基于矩阵幂的对称正定线性方程组求解的并行算法分析研究
OpenMP实现与MPI+OpenMP实现
性能测试使用Intel编译器icc,并且依赖Intel MKL数学库,测试前请确保已经正确安装了Intel MKL库
编译代码需要执行MKL库中相关的环境变量设置
具体在“探索100”中需要的设置为
#intel openmp
source /apps/intel/Compiler/11.1/069/c/bin/iccvars.sh intel64
source /apps/intel/Compiler/11.1/069/f/bin/ifortvars.sh intel64
#intel mkl
source /apps/intel/Compiler/11.1/069/c/mkl/tools/environment/mklvarsem64t.sh
#intel openmpi
source /apps/intel/Compiler/11.1/069/c/bin/iccvars.sh intel64
source /apps/intel/Compiler/11.1/069/f/bin/ifortvars.sh intel64
export LD_LIBRARY_PATH=/apps/mpi/openmpi-1.4.3-intel11.1/lib:$LD_LIBRARY_PATH
export PATH=/apps/mpi/openmpi-1.4.3-intel11.1/bin:$PATH
export LD_LIBRARY_PATH=/apps/intel/Compiler/11.1/069/f/lib/intel64:$LD_LIBRARY_PATH
编译OpenMP版本的并行代码命令如下
icc -o prog-omp -openmp -mkl prog-omp.c
编译MPI+OpenMP的程序命令如下
mpicc -o prog-mpi -mkl -openmp -o prog-mpi.c
下面给出各个程序的具体编译命令
#floarid2bin
icc -mkl -o f2b floarid2bin.c mmio.c
#gen_matrix
icc -mkl -o gen gen_matrix.c
#openmp
icc -mkl -openmp -o openmp_all openmp_all.c
#mpi_cg
mpicc -mkl -openmp -o mpi_cg mpi_cg.c
#mpi_mexp
mpicc -mkl -openmp -o mpi_mexp mpi_mexp.c
#mpi_all
mpicc -mkl -openmp -o mpi_all mpi_all.c
data目录中给出了部分从佛罗里达矩阵集中下载的数据,解压缩后可以通过 floarid2bin 程序将其转化为实验所需的数据格式
用来生成测试使用的密集矩阵,其输出符合测试程序对矩阵格式的要求
运行参数 Usage: gen [-m] -n num [-t num] -f string
-n
:正整数,指定生成矩阵的规模
-f
:字符串,用于给生成矩阵命名添加后缀
-m
:有两种生成矩阵的方法,无-m
参数时使用方法一,有-m
时使用方法二
-t
:正整数,用于指定方法二中的参数alpha,alpha取值此值的以10为底的幂值
转化佛罗里达矩阵为实验使用格式,输出名为输入名加上.bin
后缀
参数 Usage: f2b -f filename
-f
:字符串,指定输入矩阵名称
使用OpenMP实现的并行MEXP算法以及CG算法
参数 Usage: mexp -t num_threads -f string
-f
:字符串,指定输入矩阵名称
-t
:正整数,指定OpenMP使用的线程数量
使用MPI+Open MP实现的并行CG算法和并行MEXP算法
Usage: mpi_cg -f string -t num_threads
-f
:字符串,指定输入矩阵名称
-t
:正整数,指定OpenMP使用的线程数量
MPI进程数量使用 mpirun -np指定,或者通过作业管理系统LSF等指定。
这个是为了便于在测试时批量执行测试样例,可以修改源程序中files
变量测试多组数据,数据需要放在同一文件夹中。
-f
:字符串,指定输入矩阵文件夹名,必须以/
结尾
-t
:正整数,指定OpenMP使用的线程数量