mirror of
https://github.com/bytedream/litbwraw.git
synced 2025-05-09 04:05:12 +02:00
121 lines
4.5 KiB
Bash
Executable File
121 lines
4.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
if [ ! -d benches ]; then
|
|
echo "Benchmark sources not found, downloading..."
|
|
mkdir benches
|
|
curl -L -o benches/benchmarksgame-sourcecode.zip https://salsa.debian.org/benchmarksgame-team/benchmarksgame/-/raw/3889723f05b20fe9008d7c987f832fe5d5db5bf1/public/download/benchmarksgame-sourcecode.zip
|
|
unzip -d benches/ benches/benchmarksgame-sourcecode.zip
|
|
echo "Downloaded benchmark sources"
|
|
fi
|
|
|
|
if [ ! -d "fengari/node_modules" ]; then
|
|
echo "Node modules not pulled, pulling"
|
|
npm --prefix ./fengari install
|
|
echo "Node modules pulled"
|
|
fi
|
|
|
|
if [ ! -f "wasm/target/wasm32-unknown-emscripten/release/wasm.js" ]; then
|
|
echo "Wasm module not built, building it..."
|
|
cargo build --manifest-path ./wasm/Cargo.toml --release --target wasm32-unknown-emscripten
|
|
echo "Wasm module built"
|
|
fi
|
|
|
|
bench() {
|
|
target="$1"
|
|
file="$2"
|
|
args=${@:3}
|
|
|
|
secs=""
|
|
cpu_secs=""
|
|
mem=""
|
|
|
|
for _ in {1..5}; do
|
|
output=$(/usr/bin/time -f '%U %S %e %M' node "$target/main.js" "$(cat $file)" $args 2>&1> /dev/null)
|
|
if [ $? != 0 ]; then
|
|
echo "Benchmark exited unexpectedly: $output"
|
|
return 1;
|
|
fi
|
|
secs="${secs} $(echo "$output" | awk '{ print $1 + $2 }')"
|
|
cpu_secs="${cpu_secs} $(echo "$output" | awk '{ print $3 }')"
|
|
mem="${mem} $(echo "$output" | awk '{ print $4 }')"
|
|
done
|
|
|
|
mid_secs=$(echo "$secs" | awk '{ printf "%.3f", ($1 + $2 + $3 + $4 + $5) / 5 }')
|
|
mid_cpu_secs=$(echo "$cpu_secs" | awk '{ printf "%.3f", ($1 + $2 + $3 + $4 + $5) / 5 }')
|
|
mid_mem=$(echo "$mem" | awk '{ printf "%.0f", ($1 + $2 + $3 + $4 + $5) / 5 }')
|
|
|
|
echo "$mid_secs $mid_cpu_secs $mid_mem"
|
|
}
|
|
|
|
bench_and_print() {
|
|
name="$1"
|
|
directory="$2"
|
|
files="$3"
|
|
args=${@:4}
|
|
|
|
# "array" of <secs> <cpu secs> <mem> <target> [#num]
|
|
bench_results=""
|
|
for file in $files; do
|
|
num=$(echo $file | grep -oP '(?<=lua-)\d(?=.lua)')
|
|
|
|
for target in fengari wasm; do
|
|
result=$(bench "$target" "$directory/$file" $args)
|
|
|
|
if [ $? != 0 ]; then
|
|
echo "$result"
|
|
return 1;
|
|
fi
|
|
|
|
if [ -z "${num}" ]; then
|
|
bench_results="${bench_results}\n$result $target"
|
|
else
|
|
bench_results="${bench_results}\n$result $target $num"
|
|
fi
|
|
done
|
|
done
|
|
|
|
bench_results=$(printf "$bench_results" | sed 1d | sort -k1 -n)
|
|
best_bench_secs=$(printf "$bench_results" | head -1 | awk '{ print $1 }')
|
|
|
|
echo "#### $name"
|
|
echo "| x | source | secs | mem(kb) | cpu secs |"
|
|
echo "| - | ------ | ---- | --- | -------- |"
|
|
printf "$bench_results\n" | while read line; do
|
|
secs=$(echo "$line" | awk '{ print $1 }')
|
|
cpu_secs=$(echo "$line" | awk '{ print $2 }')
|
|
mem=$(echo "$line" | awk '{ print $3 }')
|
|
target=$(echo "$line" | awk '{ print $4 }')
|
|
number=$(echo "$line" | awk '{ print $5 }')
|
|
|
|
secs_ratio=$(echo "$secs $best_bench_secs" | awk '{ printf "%.3f\n", $1 / $2 }')
|
|
|
|
if [ -z "$number" ]; then
|
|
echo "| $secs_ratio | $target | $secs | $mem | $cpu_secs |"
|
|
else
|
|
echo "| $secs_ratio | $target #$number | $secs | $mem | $cpu_secs |"
|
|
fi
|
|
done
|
|
|
|
if [ -z "${args}" ]; then
|
|
echo "###### [$name](https://benchmarksgame-team.pages.debian.net/benchmarksgame/performance/$(basename $directory)) with default arguments"
|
|
else
|
|
echo "###### [$name](https://benchmarksgame-team.pages.debian.net/benchmarksgame/performance/$(basename $directory)) with argument(s): $args"
|
|
fi
|
|
}
|
|
|
|
echo "Starting benchmarks"
|
|
|
|
bench_and_print "binary-trees" benches/binarytrees "binarytrees.lua-2.lua" # binarytrees.lua-3.lua and binarytrees.lua-4.lua are using io.popen for multiprocessing
|
|
# bench_and_print "fannkuch-redux" benches/fannkuchredux "fannkuchredux.lua" # broken
|
|
bench_and_print "fasta" benches/fasta "fasta.lua-2.lua fasta.lua-3.lua"
|
|
# bench_and_print "knucleotide" benches/knucleotide "knucleotide.lua-2.lua" # needs to read from stdin
|
|
bench_and_print "mandelbrot" benches/mandelbrot "mandelbrot.lua mandelbrot.lua-2.lua mandelbrot.lua-3.lua" # mandelbrot.lua-6.lua is using io.popen for multiprocessing
|
|
bench_and_print "n-body" benches/nbody "nbody.lua nbody.lua-2.lua nbody.lua-4.lua"
|
|
# bench_and_print "nbody-inprocess" benches/nbodyinprocess "" # has no lua implementation
|
|
# bench_and_print "pidigits" benches/pidigits "pidigits.lua pidigits.lua-5.lua pidigits.lua-7.lua" # all need external 'c-gmp' module
|
|
# bench_and_print "regex-redux" benches/regexredux "regexredux.lua" # needs external 'rex_pcre2' module
|
|
# bench_and_print "reverse-complement" benches/revcomp "revcomp.lua-2.lua revcomp.lua-4.lua revcomp.lua-5.lua" # all need to read from stdin
|
|
bench_and_print "spectral-norm" benches/spectralnorm "spectralnorm.lua"
|
|
|
|
echo "Benchmarks finished"
|