Zion Boggan
repos/GPU CPU Mutex/cpu_run.sh
zionboggan.com ↗
35 lines · bash
History for this file →
1
set -u
2
SLOTS="${CPU_RUN_SLOTS:-3}"
3
THREADS="${CPU_RUN_THREADS:-3}"
4
MAXWAIT="${CPU_RUN_MAXWAIT:-3600}"
5
DIR="${CPU_RUN_SLOT_DIR:-/tmp/cpu_run_slots}"
6
mkdir -p "$DIR" 2>/dev/null || true
7
 
8
export CPU_RUN_ACTIVE=1
9
export OMP_NUM_THREADS="$THREADS" OPENBLAS_NUM_THREADS="$THREADS" MKL_NUM_THREADS="$THREADS" \
10
       NUMEXPR_NUM_THREADS="$THREADS" VECLIB_MAXIMUM_THREADS="$THREADS"
11
 
12
run() {
13
  if command -v ionice >/dev/null 2>&1; then
14
    exec nice -n 15 ionice -c3 "$@"
15
  else
16
    exec nice -n 15 "$@"
17
  fi
18
}
19
 
20
waited=0
21
while :; do
22
  for i in $(seq 1 "$SLOTS"); do
23
    exec 9>"$DIR/slot$i"
24
    if flock -n 9; then
25
      echo "[cpu_run] slot $i/$SLOTS acquired (threads=$THREADS, nice 15) → $*" >&2
26
      run "$@"
27
    fi
28
    exec 9>&-
29
  done
30
  if [ "$waited" -ge "$MAXWAIT" ]; then
31
    echo "[cpu_run] all $SLOTS slots busy ${MAXWAIT}s - running un-slotted (still capped+nice'd): $*" >&2
32
    run "$@"
33
  fi
34
  sleep 2; waited=$((waited+2))
35
done