86 lines
2.7 KiB
Bash
Executable File
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."
|