Skip to content

Commit

Permalink
Add script to run benchmark experiments
Browse files Browse the repository at this point in the history
Summary: When running benchmarks using cinder it is useful to test it with different features (Static Python, JIT, Shadow Frame). This script will be useful to run automatically a benchmark with different cinder features.

Reviewed By: czardoz

Differential Revision: D34688634

fbshipit-source-id: 7f70256
  • Loading branch information
jschavesr authored and facebook-github-bot committed Mar 8, 2022
1 parent 73713ef commit 77d5d1f
Showing 1 changed file with 159 additions and 0 deletions.
159 changes: 159 additions & 0 deletions Tools/scripts/run-benchmarks.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
#!/bin/bash

PrintHelp() {
echo ""
echo "This script will run a benchmark and store it results in csv files."
echo "'results' folder will be created a and inside it two csv files:"
echo " * description.csv: This file will contain the name of the experiments and the used comandline to execute it"
echo " e.g.: Caption, Command"
echo " Nqueens_static(), ./python Tools/benchmarks/nqueens_static.py 5"
echo " Nqueens_static(SP), ./python -X install-strict-loader Tools/benchmarks/nqueens_static.py 5"
echo " * times.csv: Each column of this file will be time executions of one experiment, and number of rows correspond to the"
echo " number of runs"
echo " e.g.: Nqueens_static(), Nqueens_static(SP)"
echo " 23.4, 13.2"
echo " 25.2, 12.8"
echo "usage:"
echo " ./run-benchmarks.sh -file PYTHON_FILE_PATH -caption CAPTION -N 10 -R 3 -sp -jit JITLIST_FILE_PATH -sf"
echo " flags:"
echo " -file PYTHON_FILE_PATH -> Benchmark that will be executed"
echo " -N -> number of iterations of the benchmarck"
echo " -R -> number of runs"
echo " -sp -> install strict loader"
echo " -jit JITLIST_FILE_PATH -> enable JIT (add the path to the jit list file as well)"
echo " -sf -> enable jit shadow frame"
echo " -caption CAPTION -> Name of the experiment. Will be used in the headers of csv files"
echo ""
}

flags=()
abb=()
R=1

validate () {
if [ ! -f python ] || [[ ! $(./python --version ) = *cinder* ]]
then
echo ""
echo "IMPORTANT: This script should be executed in the same folder as the cinder ./python executable"
echo ""
exit 1
fi
if [ -z "$file" ]
then
echo ""
echo "ERROR: Benchmark file not given"
echo ""
exit 1
fi
}

while test $# -gt 0; do
case "$1" in
-sp)
abb+=("SP")
flags+=("-X install-strict-loader")
shift
;;
-jit)
shift
abb+=("JIT")
flags+=("-X jit -X jit-list-file=$1 -X jit-enable-jit-list-wildcards")
shift
;;
-sf)
abb+=("SF")
flags+=("-X jit-shadow-frame")
shift
;;
-caption)
shift
caption=$1
shift
;;
-file)
shift
file=$1
shift
;;
-N)
shift
N=$1
shift
;;
-R)
shift
R=$1
shift
;;
-h|--help)
PrintHelp
exit 0
;;
*)
echo "$1 is not a recognized flag!"
exit
;;
esac
done

validate

size=${#abb[@]}
iter=$[1<<$size]
captions=()
cmds=()

# Create results folder to store csv files
mkdir -p results
# Iterate the loop to read and print each array element
echo "Benchmark, Command" > results/description.csv
for (( mask=0; mask<iter; mask++ ))
do
details=""
flags_str=""
for ((i=0; i<size; i++))
do
bit=$[ ($mask>>i) & 1 ]
if [ $bit == 1 ];then
if [ "$details" != "" ];then
details+="-"
fi
details+=${abb[$i]}
flags_str+=" ${flags[$i]}"
fi

done
#check that SF can be valid if and only if JIT is enabled

if [[ $details == *"SF"* && $details != *"JIT"* ]]; then
continue
fi
captions+=("$caption($details)")
cmds+=("./python$flags_str $file $N" )
echo "$caption($details), ./python$flags_str $file $N">> results/description.csv
done
headers=""
for value in ${captions[@]}
do
if [[ "$headers" != "" ]]; then
headers+=","
fi
headers+=$value
done
echo $headers > results/times.csv
for ((t=0; t<$R; t++))
do
row=""
for ((i=0; i<${#cmds[@]}; i++))
do
cmd=${cmds[$i]}
if [[ $i != 0 ]]; then
row+=","
fi
echo $cmd
out=`(\time -f "%e" $cmd) 2>&1 | tr ' ' '\n' | tail -1`
echo $out
row+=$out
done
echo $row >> results/times.csv
done

0 comments on commit 77d5d1f

Please sign in to comment.