aboutsummaryrefslogtreecommitdiffstats
path: root/research/experiments/041-batches/runs.sh
blob: 190a3d21c5810dc654d8d91c27c6abaef4abb963 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/sh
# The batch executor's runs (docs/design/024), from the repository's root,
# on builds made by 040's runs.sh build (~/.cache/pure-040/NAME), under
# research/guard.py on a quiet Pi:
#   runs.sh suite NAME ROUNDS [WORK ...]   the suite on NAME three ways: the
#                                          compiled code (jit), the executor
#                                          with its batches (batches,
#                                          PURE_JIT=0), the executor alone
#                                          (rounds, PURE_BATCH=0 too)
#   runs.sh counts NAME [WORK ...]         user-mode instructions and cycles
#                                          of suite-run's 3 rounds, each of
#                                          the two executor ways (icount.c)
set -e
here=research/experiments/041-batches
builds=$HOME/.cache/pure-040
day=$(date +%F)
quiet() { until awk '{ exit !($1 < 1.5) }' /proc/loadavg; do sleep 10; done; }
mode=$1 name=$2
shift 2
case "$mode" in
suite)
    rounds=$1
    shift
    for way in jit batches rounds; do
        quiet
        echo "$name $way $(uptime)" >> "$here/$day-load.txt"
        case $way in
        jit) PURE_JIT=1 python3 research/guard.py --most 3072 -- "$builds/$name/suite-run" "$builds/$name" "$rounds" "$@" ;;
        batches) PURE_JIT=0 python3 research/guard.py --most 3072 -- "$builds/$name/suite-run" "$builds/$name" "$rounds" "$@" ;;
        rounds) PURE_JIT=0 PURE_BATCH=0 python3 research/guard.py --most 3072 -- "$builds/$name/suite-run" "$builds/$name" "$rounds" "$@" ;;
        esac | sed "s/^{/{\"version\":\"$name\",\"way\":\"$way\",/" >> "$here/$day-suite.jsonl"
    done ;;
counts)
    cc -O2 -o "$builds/icount" $here/icount.c
    for work in "$@"; do
        for way in batches rounds; do
            quiet
            batch=1
            [ $way = rounds ] && batch=0
            PURE_JIT=0 PURE_BATCH=$batch "$builds/icount" "$builds/$name/suite-run" "$builds/$name" 3 "$work" 2>&1 >/dev/null \
                | sed "s/^{/{\"version\":\"$name\",\"way\":\"$way\",\"work\":\"$work\",/" >> "$here/$day-counts.jsonl"
        done
    done ;;
*) echo "runs.sh suite NAME ROUNDS [WORK ...] | counts NAME [WORK ...]" >&2
    exit 2 ;;
esac