aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/perf_monitoring
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2015-02-26 16:12:58 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2015-02-26 16:12:58 +0100
commita46061ab7bf290bd918716e56bf365d6939ff081 (patch)
tree8407df17f4cf4e7a0c70e805c4bc61203b96747b /bench/perf_monitoring
parenta8ad8887bf80869eb216f6f937a559290984a3f7 (diff)
Make perf_monitoring/gemm script more flexible:
- skip existing dataset - add a "-up" option to recompute the dataset (see script header) - allow to specify a filename prefix
Diffstat (limited to 'bench/perf_monitoring')
-rwxr-xr-xbench/perf_monitoring/gemm/run_gemm.sh97
1 files changed, 78 insertions, 19 deletions
diff --git a/bench/perf_monitoring/gemm/run_gemm.sh b/bench/perf_monitoring/gemm/run_gemm.sh
index 4d87ff656..d3a9fadc9 100755
--- a/bench/perf_monitoring/gemm/run_gemm.sh
+++ b/bench/perf_monitoring/gemm/run_gemm.sh
@@ -1,5 +1,25 @@
#!/bin/bash
+# Examples of environment variables to be set:
+# PREFIX="haswell-fma-"
+# CXX_FLAGS="-mfma"
+
+# Options:
+# -up : enforce the recomputation of existing data, and keep best results as a merging strategy
+
+
+if echo "$*" | grep '\-up' > /dev/null; then
+ update=true
+else
+ update=false
+fi
+
+if [ $update == true ]; then
+ echo "(Re-)Compute all changesets and keep bests"
+else
+ echo "Skip previously computed changesets"
+fi
+
if [ ! -d "eigen_src" ]; then
hg clone https://bitbucket.org/eigen/eigen eigen_src
fi
@@ -8,9 +28,32 @@ if [ ! -z '$CXX' ]; then
CXX=g++
fi
-rm sgemm.out
-rm dgemm.out
-rm cgemm.out
+function make_backup
+{
+ if [ -f "$1.out" ]; then
+ mv "$1.out" "$1.backup"
+ fi
+}
+
+function merge
+{
+ count1=`echo $1 | wc -w`
+ count2=`echo $2 | wc -w`
+
+ if [ $count1 == $count2 ]; then
+ a=( $1 ); b=( $2 )
+ res=""
+ for (( i=0 ; i<$count1 ; i++ )); do
+ ai=${a[$i]}; bi=${b[$i]}
+ tmp=`echo "if ($ai > $bi) $ai else $bi " | bc -l`
+ res="$res $tmp"
+ done
+ echo $res
+
+ else
+ echo $1
+ fi
+}
function test_current
{
@@ -18,16 +61,32 @@ function test_current
scalar=$2
name=$3
- if $CXX -O2 -DNDEBUG -march=native $CXX_FLAGS -I eigen_src gemm.cpp -DSCALAR=$scalar -o $name; then
- res=`./$name`
- echo $res
- echo "$rev $res" >> $name.out
+ prev=`grep $rev "$name.backup" | cut -c 14-`
+ res=$prev
+ count_rev=`echo $prev | wc -w`
+ count_ref=`cat "settings.txt" | wc -l`
+ if [ $update == true ] || [ $count_rev != $count_ref ]; then
+ if $CXX -O2 -DNDEBUG -march=native $CXX_FLAGS -I eigen_src gemm.cpp -DSCALAR=$scalar -o $name; then
+ curr=`./$name`
+ echo merge $prev
+ echo with $curr
+ res=`merge "$curr" "$prev"`
+ echo $res
+ echo "$rev $res" >> $name.out
+ else
+ echo "Compilation failed, skip rev $rev"
+ fi
else
- echo "Compilation failed, skip rev $rev"
+ echo "Skip existing results for $rev / $name"
+ echo "$rev $res" >> $name.out
fi
}
-while read rev
+make_backup $PREFIX"sgemm"
+make_backup $PREFIX"dgemm"
+make_backup $PREFIX"cgemm"
+
+cut -f1 -d"#" < changesets.txt | while read rev
do
if [ ! -z '$rev' ]; then
echo "Testing rev $rev"
@@ -36,27 +95,27 @@ do
actual_rev=`hg identify | cut -f1 -d' '`
cd ..
- test_current $actual_rev float sgemm
- test_current $actual_rev double dgemm
- test_current $actual_rev "std::complex<double>" cgemm
+ test_current $actual_rev float $PREFIX"sgemm"
+ test_current $actual_rev double $PREFIX"dgemm"
+ test_current $actual_rev "std::complex<double>" $PREFIX"cgemm"
fi
-done < changesets.txt
+done
echo "Float:"
-cat sgemm.out
+cat $PREFIX"sgemm.out"
echo ""
echo "Double:"
-cat dgemm.out
+cat $PREFIX"dgemm.out"
echo ""
echo "Complex:"
-cat cgemm.out
+cat $PREFIX"cgemm.out"
echo ""
-./make_plot.sh sgemm
-./make_plot.sh dgemm
-./make_plot.sh cgemm
+./make_plot.sh $PREFIX"sgemm"
+./make_plot.sh $PREFIX"dgemm"
+./make_plot.sh $PREFIX"cgemm"