where-simd-helps/slurm/submit.sh

86 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
# Instantiate and submit SLURM benchmark jobs.
#
# Usage: bash slurm/submit.sh [--papi] [--nspins N] [--params LIST] [--variants LIST] [--node NODE]
#
# Examples:
# bash slurm/submit.sh
# bash slurm/submit.sh --papi --nspins 500
# bash slurm/submit.sh --variants "ref avx2" --params "512 1024"
# bash slurm/submit.sh --node node2334 # pin all jobs to a specific node
set -euo pipefail
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
TEMPLATE="${REPO_ROOT}/slurm/templates/bench_mlkem.sh.tmpl"
# ── Defaults ─────────────────────────────────────────────────────────────────
NSPINS=1000
WITH_PAPI=OFF
PARAMS="512 768 1024"
VARIANTS="ref avx2 refnv refo0"
BENCH_NODE=""
while [[ $# -gt 0 ]]; do
case "$1" in
--papi) WITH_PAPI=ON ;;
--nspins) shift; NSPINS="$1" ;;
--params) shift; PARAMS="$1" ;;
--variants) shift; VARIANTS="$1" ;;
--node) shift; BENCH_NODE="$1" ;;
*) echo "unknown flag: $1" >&2; exit 1 ;;
esac
shift
done
# Build directory created by build.sh.
BUILD_DIR="${REPO_ROOT}/harness/build-hpc"
if [[ ! -d "$BUILD_DIR" ]]; then
echo "ERROR: $BUILD_DIR not found — run slurm/build.sh first" >&2
exit 1
fi
echo "=== pqc-bench submit ==="
echo "NSPINS : $NSPINS"
echo "WITH_PAPI: $WITH_PAPI"
echo "PARAMS : $PARAMS"
echo "VARIANTS : $VARIANTS"
echo "NODE : ${BENCH_NODE:-any}"
echo ""
JOBS_SUBMITTED=0
for PARAM in $PARAMS; do
for VARIANT in $VARIANTS; do
BINARY="${BUILD_DIR}/bench_mlkem${PARAM}_${VARIANT}"
if [[ ! -x "$BINARY" ]]; then
echo "SKIP bench_mlkem${PARAM}_${VARIANT} — binary not found"
continue
fi
# Output goes into data/raw/kyber/mlkem{PARAM}/{VARIANT}/ so the aggregation
# tool infers algorithm and variant from the directory structure.
OUTPUT_DIR="${REPO_ROOT}/data/raw/kyber/mlkem${PARAM}/${VARIANT}"
mkdir -p "$OUTPUT_DIR"
# Instantiate template.
JOB_SCRIPT="$(mktemp /tmp/bench_mlkem${PARAM}_${VARIANT}.XXXXXX.sh)"
export PARAM VARIANT NSPINS BUILD_DIR OUTPUT_DIR WITH_PAPI BENCH_NODE
envsubst '${PARAM} ${VARIANT} ${NSPINS} ${BUILD_DIR} ${OUTPUT_DIR} ${WITH_PAPI} ${BENCH_NODE}' \
< "$TEMPLATE" > "$JOB_SCRIPT"
chmod +x "$JOB_SCRIPT"
SBATCH_ARGS="--parsable"
if [[ -n "$BENCH_NODE" ]]; then
SBATCH_ARGS="$SBATCH_ARGS --nodelist=$BENCH_NODE"
fi
JOB_ID=$(sbatch $SBATCH_ARGS "$JOB_SCRIPT")
echo "SUBMIT bench_mlkem${PARAM}_${VARIANT} job=${JOB_ID} out=${OUTPUT_DIR}/${JOB_ID}.out"
JOBS_SUBMITTED=$((JOBS_SUBMITTED + 1))
done
done
echo ""
echo "Submitted $JOBS_SUBMITTED jobs."