Fix various bugs in log creation and parsing

* Force english locales (esp. for numeric values)
* Handle french and english numeric values
* Handle absence of useless_prod log
* Handle unique cache hierarchy
This commit is contained in:
Thomas Preud'homme 2011-02-24 20:58:37 +01:00
parent ee71568981
commit f1b3174af3
3 changed files with 38 additions and 19 deletions

View File

@ -1 +0,0 @@
channel.o .channel.d: channel.c channel.h Makefile

View File

@ -3,6 +3,8 @@
set -u set -u
set -v set -v
LC_ALL=C
# Files and directories # Files and directories
binDir="bin" binDir="bin"
calcDir="calculation" calcDir="calculation"

View File

@ -39,10 +39,13 @@ init_log_vars ()
{ {
local firstBarriereComm - local firstBarriereComm -
cacheList=`ls *log | perl -ni -e '/cache_([^-]+)-/; $a{$1}=""; END { foreach ( sort keys %a ) {print "$_ "}}'` cacheList=`ls *log | perl -ni -e '/cache_([^-]+)-/; $a{$1}=""; END { foreach ( sort keys %a ) {print "$_ "}}' | sed -r "s/ +\$//"`
prodList=`ls *.log | perl -ni -e '/typeProd_([^-]+)-/; $a{$1}=""; END { foreach ( sort keys %a ) {print "$_ "}}'` prodList=`ls *.log | perl -ni -e '/typeProd_([^-]+)-/; $a{$1}=""; END { foreach ( sort keys %a ) {print "$_ "}}'`
firstBarriereComm=`echo $barriereList | sed -r "s/^[^ ]* .*$//"` if ls "*typeProd_useless_loop*_comm.log" >/dev/null 2>&1
argTypeProdList=`eval ls *typeProd_useless_loop*${firstBarriereComm}_comm.log | perl -ni -e '/argTypeProd_([\d]+)-/; $a{$1}=""; END { foreach ( sort { $a <=> $b } keys %a ) {print "$_ "}}'` then
firstBarriereComm=`echo $barriereList | sed -r "s/^[^ ]* .*$//"`
argTypeProdList=`eval ls *typeProd_useless_loop*${firstBarriereComm}_comm.log | perl -ni -e '/argTypeProd_([\d]+)-/; $a{$1}=""; END { foreach ( sort { $a <=> $b } keys %a ) {print "$_ "}}'`
fi
metriqueList="cache_hits cache_miss cycles total_time" metriqueList="cache_hits cache_miss cycles total_time"
nbIter=`ls -1 *.log | head -1 | sed -r "s/^.*nbIter_([[:digit:]]+).*$/\1/"` nbIter=`ls -1 *.log | head -1 | sed -r "s/^.*nbIter_([[:digit:]]+).*$/\1/"`
valuePerCacheLine=$(grep "^buf size: " $(ls -1 *.log | head -1) | sed -r "s/^buf size: ([[:digit:]]+)$/\1/") valuePerCacheLine=$(grep "^buf size: " $(ls -1 *.log | head -1) | sed -r "s/^buf size: ([[:digit:]]+)$/\1/")
@ -126,10 +129,11 @@ contains_zero()
create_dat_header () create_dat_header ()
{ {
local prod bench metrique - local prod bench metrique numCacheConfigs -
prod="$1" prod="$1"
bench="$2" bench="$2"
metrique="$3" metrique="$3"
numCacheConfigs="$4"
# Create file # Create file
> bench_$bench-prod_$prod-metrique_$metrique.dat > bench_$bench-prod_$prod-metrique_$metrique.dat
@ -151,7 +155,7 @@ create_dat_header ()
done done
# Several points per com and cache (one per calc argument) # Several points per com and cache (one per calc argument)
else else
for i in 1 2 for i in $(seq "$numCacheConfigs")
do do
if [ $i -ne 1 ] if [ $i -ne 1 ]
then then
@ -180,7 +184,7 @@ get_metric_values ()
metriquePattern="$5" metriquePattern="$5"
logFile=cache_$cache-*-typeProd_$prod-argTypeProd_$argTypeProd-*-${com}_comm.log logFile=cache_$cache-*-typeProd_$prod-argTypeProd_$argTypeProd-*-${com}_comm.log
metricValues=$(grep -E "$metriquePattern" $logFile | sed -r "s/^(.*[^[:alnum:].])?($metriquePattern)([^[:alnum:]].*)?$/\2/;s/^(.*[^[:alnum:].])?([[:digit:].]+)([^[:alnum:]].*)?$/\2/") metricValues=$(grep -E "$metriquePattern" $logFile | sed -r "s/^(.*[^[:alnum:].,])?($metriquePattern)([^[:alnum:]].*)?$/\2/;s/^(.*[^[:alnum:].,])?([[:digit:].,]+)([^[:alnum:]].*)?$/\2/;s/[,.]/./")
totalValue=0 totalValue=0
for metricValue in $metricValues for metricValue in $metricValues
do do
@ -291,25 +295,33 @@ create_gnuplot_header ()
create_simple_gnuplot_body () create_simple_gnuplot_body ()
{ {
local metrique ylabel yscale patternPlotFile datFile - local metrique ylabel yscale patternPlotFile datFile numCacheConfigs -
ylabel="$1" ylabel="$1"
lineNum="$2" lineNum="$2"
datFile="$3" datFile="$3"
patternPlotFile="$4" patternPlotFile="$4"
numCacheConfigs="$5"
echo "set ylabel \"$ylabel\"" >> $patternPlotFile.gnuplot echo "set ylabel \"$ylabel\"" >> $patternPlotFile.gnuplot
echo "set output 'images/$patternPlotFile.ps'" >> $patternPlotFile.gnuplot echo "set output 'images/$patternPlotFile.ps'" >> $patternPlotFile.gnuplot
echo "plot '$datFile' every 3::$lineNum using 2:xtic(1) , '' every 3::$lineNum u 3" >> $patternPlotFile.gnuplot echo -n "plot '$datFile' every 3::$lineNum using 2:xtic(1)" >> $patternPlotFile.gnuplot
if [ $numCacheConfigs -gt 2 ]
then
echo " , '' every 3::$lineNum u 3" >> $patternPlotFile.gnuplot
else
echo "" >> patternPlotFile.gnuplot
fi
} }
create_complex_gnuplot_body () create_complex_gnuplot_body ()
{ {
local bench ylabel lineNum datFile patternPlotFile columnNo baseTitle - local bench ylabel lineNum datFile patternPlotFile columnNo baseTitle numCacheConfigs -
bench="$1" bench="$1"
ylabel="$2" ylabel="$2"
lineNum="$3" lineNum="$3"
datFile="$4" datFile="$4"
patternPlotFile="$5" patternPlotFile="$5"
numCacheConfigs="$6"
columnNo=2 columnNo=2
echo "set ylabel \"$ylabel\"" >> $patternPlotFile.gnuplot echo "set ylabel \"$ylabel\"" >> $patternPlotFile.gnuplot
@ -323,7 +335,10 @@ create_complex_gnuplot_body ()
echo -n "plot '$datFile' " >> $patternPlotFile.gnuplot echo -n "plot '$datFile' " >> $patternPlotFile.gnuplot
fi fi
echo -n "every :2:$lineNum:0:$lineNum using 1:$columnNo:xtic(1) title '$baseTitle (L2)'" >> $patternPlotFile.gnuplot echo -n "every :2:$lineNum:0:$lineNum using 1:$columnNo:xtic(1) title '$baseTitle (L2)'" >> $patternPlotFile.gnuplot
echo -n ", '' every :2:$lineNum:1:$lineNum using 1:$columnNo:xtic(1) title '$baseTitle (mem)'" >> $patternPlotFile.gnuplot if [ $numCacheConfigs -gt 2 ]
then
echo -n ", '' every :2:$lineNum:1:$lineNum using 1:$columnNo:xtic(1) title '$baseTitle (mem)'" >> $patternPlotFile.gnuplot
fi
columnNo=$((columnNo + 1)) columnNo=$((columnNo + 1))
done done
echo >> $patternPlotFile.gnuplot echo >> $patternPlotFile.gnuplot
@ -331,7 +346,7 @@ create_complex_gnuplot_body ()
create_gnuplot_body () create_gnuplot_body ()
{ {
local prod bench yscale ylabel lineNum datFile patternPlotFile - local prod bench yscale ylabel lineNum datFile patternPlotFile numCacheConfigs -
prod="$1" prod="$1"
bench="$2" bench="$2"
yscale="$3" yscale="$3"
@ -339,6 +354,7 @@ create_gnuplot_body ()
lineNum="$5" lineNum="$5"
datFile="$6" datFile="$6"
patternPlotFile="$7" patternPlotFile="$7"
numCacheConfigs="$8"
echo "set $yscale y" >> $patternPlotFile.gnuplot echo "set $yscale y" >> $patternPlotFile.gnuplot
if [ "$yscale" = "nologscale" ] if [ "$yscale" = "nologscale" ]
@ -350,19 +366,20 @@ create_gnuplot_body ()
echo "set title \"Producteur : $prod\"" >> $patternPlotFile.gnuplot echo "set title \"Producteur : $prod\"" >> $patternPlotFile.gnuplot
if use_histo "$prod" "$bench" if use_histo "$prod" "$bench"
then then
create_simple_gnuplot_body "$ylabel" "$lineNum" "$datFile" "$patternPlotFile" create_simple_gnuplot_body "$ylabel" "$lineNum" "$datFile" "$patternPlotFile" "$numCacheConfigs"
else else
create_complex_gnuplot_body "$bench" "$ylabel" "$lineNum" "$datFile" "$patternPlotFile" create_complex_gnuplot_body "$bench" "$ylabel" "$lineNum" "$datFile" "$patternPlotFile" "$numCacheConfigs"
fi fi
} }
create_gnuplot_file () create_gnuplot_file ()
{ {
local prod bench metrique ylabel yscale avg lineNum - local prod bench metrique ylabel yscale avg lineNum numCacheConfigs -
prod="$1" prod="$1"
bench="$2" bench="$2"
metrique="$3" metrique="$3"
baseYlabel="$4" baseYlabel="$4"
numCacheConfigs="$5"
for yscale in "nologscale" "logscale" for yscale in "nologscale" "logscale"
do do
@ -384,7 +401,7 @@ create_gnuplot_file ()
if [ $yscale != "logscale" ] || ! contains_zero "$prod" "$bench" "$datFile" "$lineNum" if [ $yscale != "logscale" ] || ! contains_zero "$prod" "$bench" "$datFile" "$lineNum"
then then
create_gnuplot_header "$prod" "$bench" "$patternPlotFile.gnuplot" create_gnuplot_header "$prod" "$bench" "$patternPlotFile.gnuplot"
create_gnuplot_body "$prod" "$bench" "$yscale" "$ylabel" "$lineNum" "$datFile" "$patternPlotFile" create_gnuplot_body "$prod" "$bench" "$yscale" "$ylabel" "$lineNum" "$datFile" "$patternPlotFile" "$numCacheConfigs"
fi fi
done done
done done
@ -418,16 +435,17 @@ main()
metriquePattern="[[:digit:]]+ +cycles " metriquePattern="[[:digit:]]+ +cycles "
ylabel="Nb cycles" ;; ylabel="Nb cycles" ;;
total_time) total_time)
metriquePattern="[[:digit:].]+ +seconds time elapsed " metriquePattern="[[:digit:].,]+ +seconds time elapsed "
ylabel="Secondes" ;; ylabel="Secondes" ;;
*) *)
echo "Pas de pattern pour cette métrique : $metrique" echo "Pas de pattern pour cette métrique : $metrique"
echo "Pas de label pour cette métrique : $metrique" echo "Pas de label pour cette métrique : $metrique"
exit 1 ;; exit 1 ;;
esac esac
create_dat_header "$prod" "$bench" "$metrique" numCacheConfigs=$(echo "$cacheList" | wc -w)
create_dat_header "$prod" "$bench" "$metrique" "$numCacheConfigs"
create_dat_body "$prod" "$bench" "$metrique" "$argTypeProd" "$metriquePattern" create_dat_body "$prod" "$bench" "$metrique" "$argTypeProd" "$metriquePattern"
create_gnuplot_file "$prod" "$bench" "$metrique" "$ylabel" create_gnuplot_file "$prod" "$bench" "$metrique" "$ylabel" "$numCacheConfigs"
done done
done done
done done