当前位置: 首页 > 工具软件 > HPCC Systems > 使用案例 >

Ubuntu22.04安装HPCC

章景同
2023-12-01

HPCC 全称 HPC Challenge Benchmark,由一组benchmark组成,共计7个,分别测试了系统7个方面的性能,这7个分别为:

  • stream:测试内存带宽
  • Random Access:测试内存刷新速率
  • PTRANS:通过多处理器结构中两两之间的通信,来衡量在整个网络的通信能力
  • Latency/Bandwidth: 测试延时与带宽
    • Latency:8 byte 数据从一个节点到另一个节点所需时间
    • Bandwidth:节点间网络通信的带宽
  • HPL:测试系统在解线性方程组时进行浮点运算的性能
  • FFT:测试双精度一维离散傅里叶变换浮点运算的速度
  • DGEMM:测试双精度矩阵乘法浮点运算的速度

本文将在Ubuntu-22.04-LTS上编译HPCC

一、安装依赖包

sudo apt-get install make
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install gfortran

二、下载源码

下载mpich安装包mpich-4.1.1.tar.gz,下载地址:http://www.mpich.org/downloads
下载lapack安装包lapack-3.11.0.tar.gz,下载地址:https://netlib.org/lapack/#_lapack_version_3_11_0

三、编译MPICH

mpich安装到/usr/mpich文件夹

sudo mkdir /usr/mpich							# 创建安装文件夹
sudo cp mpich-4.1.1.tar.gz /usr/mpich			# 将安装包复制到目标文件夹
cd /usr/mpich									# 进入安装文件夹
sudo tar zxvf mpich-4.1.1.tar.gz				# 解压			
cd mpich-4.1.1											
sudo ./configure --prefix=/usr/mpich				
sudo make										# 编译
sudo make install								# 安装

配置环境变量

sudo vim ~/.bashrc
export PATH=/usr/mpich/bin:$PATH
export INCLUDE=/usr/mpich/include:$INCLUDE
export LD_LIBRARY_PATH=/usr/mpich/lib:$LD_LIBRARY_PATH
source ~/.bashrc  			 # 使此设置永久有效,不然每次打开终端都需要重新设置

检查环境变量是否正确

which mpicc

出现/usr/mpich/bin/mpicc即为正确。

四、编译lapack

1、编译源文件

lapack的安装包已经包含了blascblaslapacke

sudo tar zxvf lapack-3.11.0.tar.gz		
cd lapack-3.11.0
cp make.inc.example make.inc
make blaslib
make cblaslib
make lapacklib
make lapackelib

编译完成后,会在lapack-3.11.0目录下生成librefblas.alibcblas.aliblapack.aliblapacke.a四个静态库。

2、静态库和头文件

为了后续使用时不用每次都指定头文件和静态库的路径,可将静态库和头文件加入系统。

# 静态库
cd lapack-3.11.0
sudo cp librefblas.a /usr/local/lib
sudo cp libcblas.a /usr/local/lib
sudo cp liblapack.a /usr/local/lib
sudo cp liblapacke.a /usr/local/lib
# 头文件
cd lapack-3.11.0/CBLAS/include
sudo cp * /usr/local/include
cd lapack-3.11.0/LAPACKE/include
sudo cp * /usr/local/include

3、BLAS使用

  • 新建文件test.c
#include <stdio.h>
#include "cblas.h"

int main(){
	const int dim = 2;
	double a[4] = {1.0, 1.0, 1.0, 1.0}, b[4] = {2.0, 2.0, 2.0, 2.0}, c[4];
	int m = dim, n = dim, k = dim, lda = dim, ldb = dim, ldc = dim;
 	double al = 1.0, be = 0.0;
 	cblas_dgemm(101, 111, 111, m, n, k, al, a, lda, b, ldb, be, c, ldc);
	printf("the matrix c is:%f,%f\n%f,%f\n", c[0], c[1], c[2], c[3]);
	return 0;
}
  • 编译
    编译时注意,更换静态库的链接顺序,可能会报错。
gcc test.c -o test -lcblas -lrefblas -lm -lgfortran
  • 运行 ./test,预期输出
the matrix c is:4.000000,4.000000
4.000000,4.000000

4、LAPACK使用

  • 新建文件test.c
/* Calling DGELS using row-major order */

#include <stdio.h>
#include <lapacke.h>

int main (int argc, const char * argv[]){
	double a[5][3] = {1, 1, 1, 2, 3, 4, 3, 5, 2, 4, 2, 5, 5, 4, 3};
	double b[5][2] = {-10, -3, 12, 14, 14, 12, 16, 16, 18, 16};
	lapack_int info, m, n, lda, ldb, nrhs;
 	int i, j;

 	m = 5;
 	n = 3;
 	nrhs = 2;
 	lda = 3;
	ldb = 2;
	
	info = LAPACKE_dgels(LAPACK_ROW_MAJOR, 'N', m, n, nrhs, *a, lda, *b, ldb);

 	for(i = 0; i < n; i ++){
		for(j=0;j<nrhs;j++){
			printf("%lf ",b[i][j]);
 		}
 		printf("\n");
  	}
   return(info);
}
  • 编译
    编译时注意,更换静态库的链接顺序,可能会报错。
gcc test.c -o test -llapacke -llapack -lcblas  -lrefblas  -lm -lgfortran
  • 运行 ./test,预期输出
2.000000 1.000000
1.000000 1.000000
1.000000 2.000000

五、编辑Makefile文件

cd hpcc-1.5.0
# 复制hpl/setup/Make.Linux_PII_CBLAS文件到hpl/目录下,并重命名为Make.LINUX
cp hpl/setup/Make.Linux_PII_CBLAS hpl/Make.LINUX  
vim hpl/Make.LINUX 									# 修改Make.LINUX文件

1、修改MPdirMPincMPlib

MPdir        = /usr/mpich
MPinc        = -I$(MPdir)/include
MPlib        = $(MPdir)/lib/libmpich.so

2、修改HPL_LIBS

HPL_LIBS     = $(HPLlib) $(MPlib) -lm -L/usr/local/lib -lcblas -lblas

3、修改CC

CC = /usr/mpich/bin/mpicc

可使用which mpicc命令检查mpicc的路径。

4、修改LINKER

LINKER = /usr/mpich/bin/mpif77

可使用which mpif77命令检查mpif77的路径。

六、编译HPCC

修改Makefile文件

cd hpcc-1.5.0
vim Makefile

修改第三行为:

arch = LINUX
  • 编译
cd hpcc-1.5.0
sudo make
cp _hpccinf.txt hpccinf.txt  	# 将_hpccinf.txt重命名为hpccinf.txt
mpirun -np 4 ./hpcc 			# 运行HPCC

运行结束后结果会写入hpccoutf.txt文件。

后记

网上找到的在Ubuntu上运行HPCC的方式都是先安装BLAS库和CBLAS库。但是在编译CBLAS时总是出错,互联网上也没有解决方法。但是在搜索解决方法时发现可以通过lapack来编译CBLAS,尝试了一下,结果可行。

 类似资料: