aboutsummaryrefslogtreecommitdiff
path: root/comparison/Inpla/sptestInpla.sh
diff options
context:
space:
mode:
Diffstat (limited to 'comparison/Inpla/sptestInpla.sh')
-rw-r--r--comparison/Inpla/sptestInpla.sh139
1 files changed, 139 insertions, 0 deletions
diff --git a/comparison/Inpla/sptestInpla.sh b/comparison/Inpla/sptestInpla.sh
new file mode 100644
index 0000000..36044a6
--- /dev/null
+++ b/comparison/Inpla/sptestInpla.sh
@@ -0,0 +1,139 @@
+#!/bin/bash
+# $1: the source file name
+# $2: options
+# example: ./sptestInpla.sh A3_10.in '-x 100000'
+
+
+# repeat and waittime
+ct=1
+waittime=5
+
+max_threads=9
+
+# options
+source=$1
+inpla_seq='inplaSeq'
+inpla_para='inplaPara'
+opt=$2
+#dir_source='prog/'
+dir_make='../../'
+path_source="$dir_source$source"
+fname=`echo $1 | sed -e s'|.*/\(.*\)|\1|'`
+
+log="log-${fname}.txt"
+
+
+# main ------------------------------------------------------
+if [ -z $1 ]; then
+ echo "Usage: ./sptestInpla.sh filename option"
+ exit
+fi
+
+if [ ! -e $path_source ]; then
+ echo "$path_source is not found."
+ exit
+fi
+
+if [ ! -e $inpla_seq -a ! -e "${inpla_seq}.exe" ]; then
+ echo "Now making Inpla in the non-threaded version as '$inpla_seq'."
+ make -C "$dir_make" clean
+ make -C "$dir_make"
+if [ -e 'inpla.exe' ]; then
+ inpla_seq="${inpla_seq}.exe"
+ mv ../../inpla.exe ./$inpla_seq
+else
+ mv ../../inpla ./$inpla_seq
+fi
+fi
+
+if [ ! -e $inpla_para -a ! -e "${inpla_para}.exe" ]; then
+ echo "Now making Inpla in the multi-threaded version as '$inpla_para'."
+ make -C "$dir_make" clean
+ make -C "$dir_make" thread
+if [ -e 'inpla.exe' ]; then
+ inpla_para="${inpla_para}.exe"
+ mv ../../inpla.exe ./$inplla_para
+else
+ mv ../../inpla ./$inpla_para
+fi
+fi
+
+
+# -------------------------------------------------
+function mywait() {
+ for w in $(seq 1 $waittime) ; do
+ echo -n "."
+ sleep 1
+ done
+}
+
+function gettime() {
+ # $1: the execution command
+ rm -f _result.txt
+ for i in $(seq 1 $ct) ; do
+ (time $1) 2>> _result.txt
+ echo
+ echo -n "Done ($i/$ct)"
+ if [[ $(($i + 1)) -le $ct ]]; then
+ mywait
+ echo 'Restart'
+ fi
+ done
+ echo
+ echo
+ logtime=`grep real _result.txt | cut -f2 | sed -e "s/\(.*\)m\(.*\)s/\1 \2/" | awk -F' ' '{print ($1*60+$2)}'`
+ echo "Execution time"
+ echo "$logtime"
+
+ # for return value
+ res=`echo "$logtime\n" | awk 'BEGIN{r=0;c=0} {r=r+$0;c++} END{print r/c}'`
+ rm -f _result.txt
+}
+
+function puts_header() {
+ # $1: the name of the log file
+ # $2: a program name
+ # ex: puts_header $log
+
+ local alog
+ alog=$1
+
+ echo '' >> $alog
+ echo "$2,$ct" | awk -F',' '{printf("%-27s| avg. time over %d runs (sec)\n",$1,$2)}' >> $alog
+ echo '===========================+=============================' >> $alog
+}
+
+function do_experiment() {
+ # $1: execution command
+ # $2: the header string to put the logfile
+ # ex: do_experiment "$inpla -f $source $opt_special $opt"
+ echo -n 'Cooling CPU'
+ mywait
+ echo
+ echo "------------------"
+ echo "$1"
+ gettime "$1"
+ echo "Average ${res}sec"
+ echo "$2,$res" | awk -F',' '{printf("%-27s| %.2f\n",$1,$2)}' >> $log
+}
+
+
+
+# clear the previous log
+rm -f $log
+
+
+puts_header $log "$source $opt"
+
+# Execution in sequential
+do_experiment "./$inpla_seq -f $path_source $opt" "non-thread"
+
+# Execution in parallel
+for ((thread=1; thread<=max_threads; thread++))
+do
+ do_experiment "./$inpla_para -f $path_source $opt -t $thread" "-t $thread"
+done
+
+echo
+cat $log
+