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 -v
LC_ALL=C
# Files and directories
binDir="bin"
calcDir="calculation"

View File

@ -39,10 +39,13 @@ init_log_vars ()
{
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 "$_ "}}'`
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 "$_ "}}'`
if ls "*typeProd_useless_loop*_comm.log" >/dev/null 2>&1
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"
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/")
@ -126,10 +129,11 @@ contains_zero()
create_dat_header ()
{
local prod bench metrique -
local prod bench metrique numCacheConfigs -
prod="$1"
bench="$2"
metrique="$3"
numCacheConfigs="$4"
# Create file
> bench_$bench-prod_$prod-metrique_$metrique.dat
@ -151,7 +155,7 @@ create_dat_header ()
done
# Several points per com and cache (one per calc argument)
else
for i in 1 2
for i in $(seq "$numCacheConfigs")
do
if [ $i -ne 1 ]
then
@ -180,7 +184,7 @@ get_metric_values ()
metriquePattern="$5"
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
for metricValue in $metricValues
do
@ -291,25 +295,33 @@ create_gnuplot_header ()
create_simple_gnuplot_body ()
{
local metrique ylabel yscale patternPlotFile datFile -
local metrique ylabel yscale patternPlotFile datFile numCacheConfigs -
ylabel="$1"
lineNum="$2"
datFile="$3"
patternPlotFile="$4"
numCacheConfigs="$5"
echo "set ylabel \"$ylabel\"" >> $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 ()
{
local bench ylabel lineNum datFile patternPlotFile columnNo baseTitle -
local bench ylabel lineNum datFile patternPlotFile columnNo baseTitle numCacheConfigs -
bench="$1"
ylabel="$2"
lineNum="$3"
datFile="$4"
patternPlotFile="$5"
numCacheConfigs="$6"
columnNo=2
echo "set ylabel \"$ylabel\"" >> $patternPlotFile.gnuplot
@ -323,7 +335,10 @@ create_complex_gnuplot_body ()
echo -n "plot '$datFile' " >> $patternPlotFile.gnuplot
fi
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))
done
echo >> $patternPlotFile.gnuplot
@ -331,7 +346,7 @@ create_complex_gnuplot_body ()
create_gnuplot_body ()
{
local prod bench yscale ylabel lineNum datFile patternPlotFile -
local prod bench yscale ylabel lineNum datFile patternPlotFile numCacheConfigs -
prod="$1"
bench="$2"
yscale="$3"
@ -339,6 +354,7 @@ create_gnuplot_body ()
lineNum="$5"
datFile="$6"
patternPlotFile="$7"
numCacheConfigs="$8"
echo "set $yscale y" >> $patternPlotFile.gnuplot
if [ "$yscale" = "nologscale" ]
@ -350,19 +366,20 @@ create_gnuplot_body ()
echo "set title \"Producteur : $prod\"" >> $patternPlotFile.gnuplot
if use_histo "$prod" "$bench"
then
create_simple_gnuplot_body "$ylabel" "$lineNum" "$datFile" "$patternPlotFile"
create_simple_gnuplot_body "$ylabel" "$lineNum" "$datFile" "$patternPlotFile" "$numCacheConfigs"
else
create_complex_gnuplot_body "$bench" "$ylabel" "$lineNum" "$datFile" "$patternPlotFile"
create_complex_gnuplot_body "$bench" "$ylabel" "$lineNum" "$datFile" "$patternPlotFile" "$numCacheConfigs"
fi
}
create_gnuplot_file ()
{
local prod bench metrique ylabel yscale avg lineNum -
local prod bench metrique ylabel yscale avg lineNum numCacheConfigs -
prod="$1"
bench="$2"
metrique="$3"
baseYlabel="$4"
numCacheConfigs="$5"
for yscale in "nologscale" "logscale"
do
@ -384,7 +401,7 @@ create_gnuplot_file ()
if [ $yscale != "logscale" ] || ! contains_zero "$prod" "$bench" "$datFile" "$lineNum"
then
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
done
done
@ -418,16 +435,17 @@ main()
metriquePattern="[[:digit:]]+ +cycles "
ylabel="Nb cycles" ;;
total_time)
metriquePattern="[[:digit:].]+ +seconds time elapsed "
metriquePattern="[[:digit:].,]+ +seconds time elapsed "
ylabel="Secondes" ;;
*)
echo "Pas de pattern pour cette métrique : $metrique"
echo "Pas de label pour cette métrique : $metrique"
exit 1 ;;
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_gnuplot_file "$prod" "$bench" "$metrique" "$ylabel"
create_gnuplot_file "$prod" "$bench" "$metrique" "$ylabel" "$numCacheConfigs"
done
done
done