HPC测试环境部署

#!/bin/bash
set -ex

red="-e \033[31m"
green="-e \033[32m"
yellow="-e \033[33m"
blue="-e \033[34m" 
reset="\033[0m"

CDIR="$(cd "$(dirname "$0")";pwd -P)"
NDIR="$CDIR/.."

#前置安装包安装
yum install -y epel-release
yum install -y vim net-tools tree bzip2 gcc gcc-c++ libudev* flex* \
libcurl-devel libxml2 numa* glibc* glibm* wget make autoconf automake \
zip gcc-gnat libgcc glibc-devel bison flex m4 texinfo build-essential \
perl-Data-Duper libtool numactl binutils systemd-devel valgrind zlib-devel zlib




# 软件列表
declare -A downloadlist
downloadlist=(
[gcc-9.3.0.tar.gz]="https://ftp.gnu.org/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz"
[gmp-6.1.0.tar.bz2]="https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2"
[mpfr-3.1.4.tar.bz2]="http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2"
[mpc-1.0.3.tar.gz]="http://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz"
[isl-0.18.tar.bz2]="http://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2"
[hucx-v1.2.1-huawei.tar.gz]="https://gitee.com/kunpengcompute/hucx/archive/refs/tags/v1.2.1-huawei.tar.gz"
[xucg-v1.2.1-huawei.tar.gz]="https://gitee.com/kunpengcompute/xucg/archive/refs/tags/v1.2.1-huawei.tar.gz"
[hmpi-v1.2.1-huawei.tar.gz]="https://gitee.com/kunpengcompute/hmpi/archive/refs/tags/v1.2.1-huawei.tar.gz"
[OpenBLAS-0.3.19.tar.gz]="https://github.com/xianyi/OpenBLAS/releases/download/v0.3.19/OpenBLAS-0.3.19.tar.gz"
[hpl-2.3.tar.gz]="https://www.netlib.org/benchmark/hpl/hpl-2.3.tar.gz"
[go1.20.2.src.tar.gz]="https://go.dev/dl/go1.20.2.src.tar.gz"
[go1.17.13.src.tar.gz]="https://go.dev/dl/go1.17.13.src.tar.gz"
[go1.4.3.src.tar.gz]="https://go.dev/dl/go1.4.3.src.tar.gz"
[singularity-3.8.0.tar.gz]="https://github.com/apptainer/singularity/releases/download/v3.8.0/singularity-3.8.0.tar.gz"
[openmpi-4.1.5.tar.gz]="https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.5.tar.gz"
[osu-micro-benchmarks-7.0.1.tar.gz]="https://mvapich.cse.ohio-state.edu/download/mvapich/osu-micro-benchmarks-7.0.1.tar.gz"
)
#所有包的总数
total_pkg=${#downloadlist[*]}
test -d $CDIR/src || mkdir -p $CDIR/src
for key in ${!downloadlist[*]}
do
   if [ ! -e $key ];then
      if (wget -P ./ ${downloadlist[$key]} --no-check-certificate && echo  ${green}${downloadlist[$key]}  download successful! ${reset}) then
        let total_pkg--
      else
        echo  ${yellow} ${downloadlist[$key]}  ${key} download faild ${reset}
      fi
   else
      echo  ${green} ${downloadlist[$key]} is exist! ${reset}
          if [ "${key:0-6}" == "tar.gz" -o "${key:0-7}" == "tar.bz2" ];then
              if [[ ${key:0:2} == go ]];then
                  mkdir -p $CDIR/src/$(echo ${key:0:12} | cut -d . -f 1-3)
                  tar -xf ${key} -C $CDIR/src/$(echo ${key:0:12} | cut -d . -f 1-3)
              else
                tar -xf ${key} -C $CDIR/src
              fi
          else
              unzip ${key} -d $CDIR/src
          fi
      let total_pkg--
   fi
done

if [ $total_pkg -ne 0 ];then
  echo  ${red} "There are $total_pkg installation packages that have not been downloaded" ${reset}
  exit 1
else
  echo  ${green}"All installation packages have been downloaded"${reset}
fi

# 解压go软件包
mkdir -p /usr/local/go/{go1.20.2,go1.17.13,go1.4.3}
tar -xf go1.20.2.src.tar.gz  --strip-components=1 -C /usr/local/go/go1.20.2
tar -xf go1.17.13.src.tar.gz  --strip-components=1 -C /usr/local/go/go1.17.13
tar -xf go1.4.3.src.tar.gz  --strip-components=1 -C /usr/local/go/go1.4.3

# install gcc-9.3.0
tar -xf gcc-9.3.0.tar.gz -C $CDIR/src
cp $CDIR/gmp-6.1.0.tar.bz2  $CDIR/src/gcc-9.3.0
cp $CDIR/mpfr-3.1.4.tar.bz2 $CDIR/src/gcc-9.3.0
cp $CDIR/mpc-1.0.3.tar.gz   $CDIR/src/gcc-9.3.0
cp $CDIR/isl-0.18.tar.bz2   $CDIR/src/gcc-9.3.0

cd $CDIR/src/gcc-9.3.0
./contrib/download_prerequisites
sleep 10

test -d build || mkdir build && cd build
../configure --enable-languages=c,c++,fortran \
--disable-multilib --with-system-zlib \
--prefix=/usr/local/gcc9.3.0 && \
make  -j$(grep -w processor /proc/cpuinfo | wc -l) && \
make  -j$(grep -w processor /proc/cpuinfo | wc -l) install
cat>>/etc/profile<<'EOF'
#---GCC-9.3.0 --------------------------------
export GCC_HOME=/usr/local/gcc9.3.0
export PATH=${GCC_HOME}/bin:$PATH
export LD_LIBRARY_PATH=${GCC_HOME}/lib64:$LD_LIBRARY_PATH
EOF
source /etc/profile
gcc --version


# install xucg & hucx
cp -r $CDIR/src/xucg-v1.2.1-huawei/* $CDIR/src/hucx-v1.2.1-huawei/src/ucg
cd $CDIR/src/hucx-v1.2.1-huawei
./autogen.sh && \
./contrib/configure-opt --prefix=/usr/local/hucx
make -j$(grep -w processor /proc/cpuinfo | wc -l)
make -j$(grep -w processor /proc/cpuinfo | wc -l) install

# install hmpi
cd $CDIR/src/hmpi-v1.2.1-huawei/
./autogen.pl && \
./configure --prefix=/usr/local/hmpi \
--with-platform=contrib/platform/mellanox/optimized \
--enable-mpi1-compatibility \
--with-ucx=/usr/local/hucx && \
make -j$(grep -w processor /proc/cpuinfo | wc -l) && \
make -j$(grep -w processor /proc/cpuinfo | wc -l) install

cat>>/etc/profile<<'EOF'
#---hucx-hmpi-1.2.1 --------------------------------
export HUCX=/usr/local/hucx
export HMPI=/usr/local/hmpi
export PATH=$HMPI/bin:$HUCX/bin:$PATH
export LD_LIBRARY_PATH=$HMPI/lib:$HUCX/lib:$LD_LIBRARY_PATH
EOF
source /etc/profile

# install OpenBlas
cat>>/etc/profile<<'EOF'
#---OpenBLAS-0.3.19--------------------------------
export CC=`which gcc`
export CXX=`which g++`
export FC=`which gfortran`
export OPENBLAS_HOME=/usr/local/OpenBLAS-0.3.19
export LD_LIBRARY_PATH=$OPENBLAS_HOME/lib:$LD_LIBRARY_PATH
EOF
source /etc/profile

cd $CDIR/src/OpenBLAS-0.3.19
make -j$(grep -w processor /proc/cpuinfo | wc -l) && \
make -j$(grep -w processor /proc/cpuinfo | wc -l) PREFIX=/usr/local/OPENBLAS-0.3.19 install


#install Linpack
cd  $CDIR/src/hpl-2.3
cp -r $CDIR/src/hpl-2.3 /usr/local/ && cd /usr/local/hpl-2.3

cat>Make.Linux_ARM<<'EOF'
SHELL        = /bin/sh
CD           = cd
CP           = cp
LN_S         = ln -fs
MKDIR        = mkdir -p
RM           = /bin/rm -f
TOUCH        = touch
#-----------------------------------------
ARCH         = Linux_ARM
TOPdir       = /usr/local/hpl-2.3
#-----------------------------------------

INCdir       = $(TOPdir)/include
BINdir       = $(TOPdir)/bin/$(ARCH)
LIBdir       = $(TOPdir)/lib/$(ARCH)
HPLlib       = $(LIBdir)/libhpl.a

#-----------------------------------------
LAdir        = /usr/local/OPENBLAS-0.3.19
#-----------------------------------------

ifndef  LAinc
LAinc        = $(LAdir)/include
endif

ifndef  LAlib
LAlib        = $(LAdir)/lib/libopenblas.a
endif

F2CDEFS      = -DAdd__ -DF77_INTEGER=int -DStringSunStyle
HPL_INCLUDES = -I$(INCdir) -I$(INCdir)/$(ARCH) -I$(LAinc) $(MPinc)
HPL_LIBS     = $(HPLlib) $(LAlib) $(MPlib)
HPL_OPTS     = -DHPL_DETAILED_TIMING -DHPL_PROGRESS_REPORT
HPL_DEFS     = $(F2CDEFS) $(HPL_OPTS) $(HPL_INCLUDES)
CC       = mpicc
CCNOOPT  = $(HPL_DEFS)
OMP_DEFS = -fopenmp
CCFLAGS  = $(HPL_DEFS) -O3
LINKER       = $(CC)
LINKFLAGS    = $(CCFLAGS) $(OMP_DEFS)
ARCHIVER     = ar
ARFLAGS      = r
RANLIB       = echo
EOF

make arch=Linux_ARM

cd /usr/local/hpl-2.3/ && tree -L 3 bin lib include

# 安装stream_mpi.c
test -d /usr/local/stream || mkdir -p /usr/local/stream
cd /usr/local/stream
wget -P /usr/local/stream https://www.cs.virginia.edu/stream/FTP/Code/Versions/stream_mpi.c
mpicc /usr/local/stream/stream_mpi.c -fopenmp -O3 -DSTREAM_ARRAY_SIZE=96000000 -DNTIMES=100 -mcmodel=large \
-o /usr/local/stream/stream_c_mpi.exe

#安装OSU7.0.1
cd $CDIR/src/osu-micro-benchmarks-7.0.1
./configure --prefix=/usr/local/osu-7.0.1 CC=`which mpicc` CXX=`which mpicxx` && make && make install 


#install go1.4.3
cd /usr/local/go/go1.4.3/src
./make.bash
PATH=/usr/local/go/go1.4.3/bin:$PATH
go version

#install go1.17.13
cd /usr/local/go/go1.17.13/src
export GOROOT_BOOTSTRAP=/usr/local/go/go1.4.3
./make.bash

#install go1.20.2
cd /usr/local/go/go1.20.2/src
export GOROOT_BOOTSTRAP=/usr/local/go/go1.17.13
./make.bash

cat>>/etc/profile<<'EOF'
export GO_HOME=/usr/local/go/go1.20.2
export PATH=${GO_HOME}/bin:$PATH
EOF
source /etc/profile

#install singularity-3.8.0
cd $CDIR/src/singularity-3.8.0
./mconfig --prefix=/usr/local/singularity-3.8.0 && \
cd builddir/ && make && make install

cat>>/etc/profile<<'EOF'
#---singularity-3.8.0------------------------------------
export singularity_home=/usr/local/singularity-3.8.0
export PATH=${singularity_home}/bin:$PATH
EOF
source /etc/profile

# install openmpi-4.1.5
cd $CDIR/src/openmpi-4.1.5
./configure --prefix=/usr/local/openmpi-4.1.5 && \
make -j$(grep -w processor /proc/cpuinfo | wc -l)  && \
make -j$(grep -w processor /proc/cpuinfo | wc -l)  install
cat>>/etc/profile<<'EOF'
#---openmpi-4.1.5----------------------------------------
export openmpi_home=/usr/local/openmpi-4.1.5
export PATH=${openmpi_home}/bin:$PATH
export LD_BRARY_PATH=${openmpi_home}/lib:$LD_BRARY_PATH
EOF
source /etc/profile

 

posted @ 2023-04-02 20:39  vmsysjack  阅读(133)  评论(0)    收藏  举报