HPCC 全称 HPC Challenge Benchmark,由一组benchmark组成,共计7个,分别测试了系统7个方面的性能,这7个分别为:
本文将在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
安装到/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
的安装包已经包含了blas
、cblas
、lapacke
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.a
、libcblas.a
、liblapack.a
、liblapacke.a
四个静态库。
为了后续使用时不用每次都指定头文件和静态库的路径,可将静态库和头文件加入系统。
# 静态库
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
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
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文件
MPdir
、MPinc
、MPlib
MPdir = /usr/mpich
MPinc = -I$(MPdir)/include
MPlib = $(MPdir)/lib/libmpich.so
HPL_LIBS
HPL_LIBS = $(HPLlib) $(MPlib) -lm -L/usr/local/lib -lcblas -lblas
CC
CC = /usr/mpich/bin/mpicc
可使用which mpicc
命令检查mpicc
的路径。
LINKER
LINKER = /usr/mpich/bin/mpif77
可使用which mpif77
命令检查mpif77
的路径。
修改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
,尝试了一下,结果可行。