一、Linpack简介
Linpack是国际上最流行的用于测试高性能计算机系统浮点性能的benchmark。通过对高性能计算机采用高斯消元法求解一元N次稠密线性代数方程组的测试,评价高性能计算机的浮点性能。
Performance Linpack,也叫高度并行计算基准测试,它对数组大小N没有限制,求解问题的规模可以改变,除基本算法(计算量)不可改变外,可以采用其它任何优化方法。前两种测试运行规模较小,已不是很适合现代计算机的发展。
HPL
是针对现代并行计算机提出的测试方式。用户在不修改任意测试程序的基础上,可以调节问题规模大小(矩阵大小)、使用CPU数目、使用各种优化方法等等来执
行该测试程序,以获取最佳的性能。HPL采用高斯消元法求解线性方程组。求解问题规模为N时,浮点运算次数为(2/3 *
N^3-2*N^2)。因此,只要给出问题规模N,测得系统计算时间T,峰值=计算量(2/3 *
N^3-2*N^2)/计算时间T,测试结果以浮点运算每秒(Flops)给出。HPL测试结果是TOP500排名的重要依据。
二、Linpack安装与测试
1. Linpack安装条件:
在安装HPL之前,系统中必须已经安装了编译器、并行环境MPI以及基本线性代数子方程(BLAS)或矢量图形信号处理库(VSIPL)两者之一。
在Ubuntu下,使用apt-get安装gfortran,mpich2,每个计算节点都需要安装
安装完后,可先使用mpicc编译helloworld验证mpi集群是否工作正常
hpl linpack缺省配置是使用atlas的库,所以这里我们安装ATLAS
参考http://blog.sina.com.cn/s/blog_708532ea0100m8nt.html
根据atlas的安装文档, 首先要switch off cpu throttling.首先安装cpufrequtils和cpufreqd这两个包, 也许还要安装powernowd包
从下载atlas
cd ATLAS
mkdir build
cd build
../configure
make
编译没有问题的话会在lib目录下生成几个静态库
2. 安装与编译Linpack:
第一步,从 网站上下载HPL包hpl.tar.gz并解包
cd hpl-2.1
cp setup/Make.Linux_PII_CBLAS_gm Make.x86_64
修改下列配置:
ARCH = x86_64
TOPdir = $(HOME)/projects/hpl-2.1
LAdir = $(HOME)/projects/ATLAS/build/lib
LAinc =
LAlib = $(LAdir)/libcblas.a $(LAdir)/libatlas.a
然后开始编译:
make arch=x86_64
如果出现符号找不到的问题,请检查LAlib的库的位置
cd bin/x86_64
在这个目录下生成了两个文件, HPL.dat是linpack计算的配置文件, xhpl是测试程序
这里有关于HPL.dat的配置说明:
http://blog.csdn.net/yosoqoo/article/details/3563349
其中几个重要的参数(必须针对集群环境修改)
1 # 表示只做一次计算,使用下面的第一个数
100000 30 34 35 Ns #矩阵大小,为了测试性能,一般取N*N*8 ~ 内存总量,集群时考虑总内存量
1 # of NBs
192 2 3 4 NBs #分块大小,经验值192
4 1 4 Ps # PxQ 应该等于整个集群的进程数,一般等于cpu核数
16 4 1 Qs # P 一般<=Q
如果是单机,可以运行mpiexec -n 64 ./xhpl来看一下是否工作正常。
对于集群,首先需要保证所有机器的可以相互使用ssh无密码登录(比如要从s1登录到s2,需要把s1上的.ssh/id_rsa.pub内容拷贝到s2的.ssh/authorized_keys里。
然后创建mpi_hosts文件,内容就是集群内各机器名称,每个机器一行。
在每个机器上,都需要有相同的用户,以及同样的hpl-2.1路径和文件HPL.data,xhpl程序
运行mpiexec -n 64 -f mpi_hosts, ./xhpl
注意:
1. 矩阵不能太小,要保证矩阵数据可以占用大量内存,运行时可以free来查看内存使用量,用top,然后按1来查看cpu每个核的使用情况
2. 节点间数据传输量比较大,应该使用万兆网络,否则网络会成为瓶颈。
3.本文只是为了验证,并不是为了优化benchmark。如果要达到更好的benchmark数值,应该使用优化的blas库,比如intel的mkl。intel的mkl本身就带了linpack测试程序
阅读(1250) | 评论(0) | 转发(0) |