Opens a larger view. Escape closes it.

hardware-counters

cirrus_build.sh

#!/bin/bash
# Build and instrument all benchmarks on Cirrus (HPE Cray EX4000, EPYC 9825 Turin).
# Mirrors the ARCHER2 build_all.sh; differences are noted inline.
#   bash -l cirrus_build.sh
set -u
B=/work/project/project/user
module load perftools >/dev/null 2>&1
echo "pat_build: $(which pat_build)"
echo "cc: $(cc --version 2>&1 | head -1)"
echo

# ---------------------------------------------------------------- STREAM
echo "### STREAM ###"
mkdir -p "$B/builds/stream" && cd "$B/builds/stream" || exit 1
cp -f "$B/src/stream.c" .
# Cirrus nodes have 768 GB, but keep sizes identical to ARCHER2 so the two
# platforms are directly comparable. 80M elements ~= 1.9 GB.
for S in 10000000 40000000 80000000; do
    cc -O3 -fopenmp -DSTREAM_ARRAY_SIZE=$S -DNTIMES=20 -o "stream_$S" stream.c 2>/dev/null
    pat_build -w -o "stream_$S+pat" "stream_$S" 2>/dev/null
    printf "  %-10s %s\n" "$S" "$([ -f "stream_$S+pat" ] && echo ok || echo FAILED)"
done

# ---------------------------------------------------------------- HPCG
echo "### HPCG ###"
cd "$B/src/hpcg" || exit 1
cat > setup/Make.Cray << 'EOF'
SHELL         = /bin/sh
CD            = cd
CP            = cp
LN_S          = ln -s -f
MKDIR         = mkdir -p
RM            = /bin/rm -f
TOUCH         = touch
TOPdir        = .
SRCdir        = $(TOPdir)/src
INCdir        = $(TOPdir)/src
BINdir        = $(TOPdir)/bin
MPinc         =
MPlib         =
HPCG_INCLUDES = -I$(INCdir) -I$(INCdir)/$(arch) $(MPinc)
HPCG_LIBS     =
HPCG_OPTS     = -DHPCG_NO_LONG_LONG
HPCG_DEFS     = $(HPCG_OPTS) $(HPCG_INCLUDES)
CXX           = CC
CXXFLAGS      = $(HPCG_DEFS) -O3 -ffast-math -ftree-vectorize -fopenmp
LINKER        = $(CXX)
LINKFLAGS     = $(CXXFLAGS)
ARCHIVER      = ar
ARFLAGS       = r
RANLIB        = echo
EOF
mkdir -p build_cray && cd build_cray || exit 1
../configure Cray >/dev/null 2>&1
make -j16 > "$B/logs/hpcg_build.log" 2>&1
if [ -f bin/xhpcg ]; then
    mkdir -p "$B/builds/hpcg" && cd "$B/builds/hpcg" || exit 1
    cp -f "$B/src/hpcg/build_cray/bin/xhpcg" .
    pat_build -g mpi,io -w -o xhpcg+pat xhpcg 2>/dev/null
    echo "  $([ -f xhpcg+pat ] && echo ok || echo FAILED)"
else
    echo "  BUILD FAILED - see logs/hpcg_build.log"
fi

# ---------------------------------------------------------------- HPL
echo "### HPL ###"
cd "$B/src/hpl-2.3" || exit 1
cat > Make.Cray << EOF
SHELL        = /bin/sh
CD           = cd
CP           = cp
LN_S         = ln -s
MKDIR        = mkdir
RM           = /bin/rm -f
TOUCH        = touch
ARCH         = Cray
TOPdir       = $B/src/hpl-2.3
INCdir       = \$(TOPdir)/include
BINdir       = \$(TOPdir)/bin/\$(ARCH)
LIBdir       = \$(TOPdir)/lib/\$(ARCH)
HPLlib       = \$(LIBdir)/libhpl.a
MPinc        =
MPlib        =
LAinc        =
LAlib        = -lsci_cray
F2CDEFS      = -DAdd_ -DF77_INTEGER=int -DStringSunStyle
HPL_INCLUDES = -I\$(INCdir) -I\$(INCdir)/\$(ARCH) \$(LAinc) \$(MPinc)
HPL_LIBS     = \$(HPLlib) \$(LAlib) \$(MPlib)
HPL_OPTS     = -DHPL_CALL_CBLAS
HPL_DEFS     = \$(F2CDEFS) \$(HPL_OPTS) \$(HPL_INCLUDES)
CC           = cc
CCNOOPT      = \$(HPL_DEFS)
CCFLAGS      = \$(HPL_DEFS) -O3 -fopenmp
LINKER       = cc
LINKFLAGS    = \$(CCFLAGS)
ARCHIVER     = ar
ARFLAGS      = r
RANLIB       = echo
EOF
make arch=Cray > "$B/logs/hpl_build.log" 2>&1
if [ -f bin/Cray/xhpl ]; then
    mkdir -p "$B/builds/hpl" && cd "$B/builds/hpl" || exit 1
    cp -f "$B/src/hpl-2.3/bin/Cray/xhpl" .
    pat_build -g mpi -w -o xhpl+pat xhpl 2>/dev/null
    echo "  $([ -f xhpl+pat ] && echo ok || echo FAILED)"
else
    echo "  BUILD FAILED - see logs/hpl_build.log"
fi

# ---------------------------------------------------------------- miniFE
echo "### miniFE ###"
cd "$B/src/miniFE/openmp/src" 2>/dev/null || cd "$B/src/miniFE/ref/src" || exit 1
make -j16 CXX=CC CC=cc CXXFLAGS="-O3 -fopenmp" CFLAGS="-O3 -fopenmp" \
     MPI_CXX=CC MPI_CC=cc > "$B/logs/minife_build.log" 2>&1
SRC=$PWD
if [ -f "$SRC/miniFE.x" ]; then
    mkdir -p "$B/builds/minife" && cd "$B/builds/minife" || exit 1
    cp -f "$SRC/miniFE.x" ./minife.x
    pat_build -g mpi -w -o minife.x+pat minife.x 2>/dev/null
    echo "  $([ -f minife.x+pat ] && echo ok || echo FAILED)"
else
    echo "  BUILD FAILED - see logs/minife_build.log"
fi

# ---------------------------------------------------------------- lulesh
echo "### lulesh ###"
cd "$B/src/LULESH" || exit 1
make -j16 CXX="CC -DUSE_MPI=1" CXXFLAGS="-O3 -fopenmp" LDFLAGS="-fopenmp" \
     > "$B/logs/lulesh_build.log" 2>&1
if [ -f lulesh2.0 ]; then
    mkdir -p "$B/builds/lulesh" && cd "$B/builds/lulesh" || exit 1
    cp -f "$B/src/LULESH/lulesh2.0" .
    pat_build -g mpi -w -o lulesh2.0+pat lulesh2.0 2>/dev/null
    echo "  $([ -f lulesh2.0+pat ] && echo ok || echo FAILED)"
else
    echo "  BUILD FAILED - see logs/lulesh_build.log"
fi

# ---------------------------------------------------------------- CoMD
echo "### CoMD ###"
cd "$B/src/CoMD/src-mpi" || exit 1
[ -f Makefile.vanilla ] && cp -f Makefile.vanilla Makefile
sed -i 's|^CC *=.*|CC = cc|'                     Makefile
sed -i 's|^OPTFLAGS *=.*|OPTFLAGS = -O3 -fopenmp|' Makefile
sed -i 's|^DO_MPI *=.*|DO_MPI = ON|'             Makefile
make -j16 > "$B/logs/comd_build.log" 2>&1
if [ -f "$B/src/CoMD/bin/CoMD-mpi" ]; then
    mkdir -p "$B/builds/comd" && cd "$B/builds/comd" || exit 1
    cp -f "$B/src/CoMD/bin/CoMD-mpi" .
    pat_build -g mpi -w -o CoMD-mpi+pat CoMD-mpi 2>/dev/null
    echo "  $([ -f CoMD-mpi+pat ] && echo ok || echo FAILED)"
else
    echo "  BUILD FAILED - see logs/comd_build.log"
fi

echo
echo "=== instrumented binaries ==="
ls -la "$B"/builds/*/*+pat 2>/dev/null | awk '{print "  " $NF}'