lean2/script/hpc.sh

94 lines
2.5 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
# This script assumes the HPC command line tool `job` is in your path.
# To install HPC go to \\msr-arrays\Tools\HPC-V3-SP3
# Script configuration
HEAD=RR1-N13-09-H44 # HEAD node of a HPC cluster
WORKDIR="\\\\msr-arrays\\Scratch\\msr-pool\\Redmond\\leonardo" # Path for the working directory in the HPC Cluster. It must contain input test files and auxiliary DLLs needed for executing Lean
LEAN_PATH=/cygdrive/c/Users/leonardo/projects/lean
BUILD_PATH=$LEAN_PATH/build
BUILD_TYPE=Debug
REPO=origin
BRANCH=master
LOG=$LEAN_PATH/build_log
RESULT_DIR=$LEAN_PATH/build/results
MAKE_JOBS=20
################################
PREV_COMMIT=$LEAN_PATH/prev_commit
# Update Lean binary
cd $LEAN_PATH
git fetch $REPO
git reset --hard $REPO/$BRANCH
GIT_COMMIT=`git log --oneline -n 1 | cut -d ' ' -f 1` # Used for BUILDNAME
if [[ ! -a $PREV_COMMIT ]] || [[ `cat $PREV_COMMIT` != $GIT_COMMIT ]]
then
mkdir -p $BUILD_PATH
cd $BUILD_PATH
rm -rf *
cmake $LEAN_PATH/src -DCMAKE_BUILD_TYPE=$BUILD_TYPE
make -j $MAKE_JOBS
echo `date` : Build $GIT_COMMIT | tee -a $LOG
echo $GIT_COMMIT > $PREV_COMMIT
else
echo "$GIT_COMMIT is already built." | tee -a $LOG
fi
# Copy lean to workdir in the cluster
cd $BUILD_PATH
cp shell/lean.exe $WORKDIR
# Create new job
JobId=`job new /scheduler:$HEAD | awk '{ print $4 }'`
echo "Created HPC job $JobId"
# Add tasks for executing .lean files at $WORKDIR
for f in `ls $WORKDIR`; do
if [ ${f:(-5)} == ".lean" ]; then
job add $JobId /scheduler:$HEAD /workdir:$WORKDIR /stdout:$f.$JobId.out /stderr:$f.$JobId.err /stdin:$f lean.exe
fi
done
# Submit job
job submit /id:$JobId /scheduler:$HEAD
# Wait job to finish
for (( ; ; )); do
if job view $JobId /scheduler:$HEAD | grep "State.*Finished"; then
echo "Job $JobId has finished"
break
else
if job view $JobId /scheduler:$HEAD | grep "State.*Failed"; then
echo "Job $JobId has failed"
echo "======= FAILURE Details from HPC ========="
job view $JobId /scheduler:$HEAD
echo "=========================================="
break
else
echo "Waiting for job $JobId"
sleep 1
fi
fi
done
# Move results to RESULT_DIR
mkdir -p $RESULT_DIR
for f in `ls $WORKDIR`; do
if [ `expr match "$f" ".*$JobId.out.*"` != 0 ]; then
echo "Copying $WORKDIR\\$f"
cp "$WORKDIR\\$f" $RESULT_DIR
rm "$WORKDIR\\$f"
fi
if [ `expr match "$f" ".*$JobId.err.*"` != 0 ]; then
echo "Copying $WORKDIR\\$f"
cp "$WORKDIR\\$f" $RESULT_DIR
rm "$WORKDIR\\$f"
fi
done