You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.8 KiB
68 lines
1.8 KiB
#!/bin/bash
|
|
# An utility for tuning the LibUCW radix sorter
|
|
# (c) 2007 Martin Mares <mj@ucw.cz>
|
|
set -e
|
|
UCW_PROGNAME="$0"
|
|
. lib/libucw.sh
|
|
|
|
# Path to LibUCW build directory
|
|
[ -n "$BUILD" ] || BUILD=..
|
|
[ -f "$BUILD/ucw/sorter/sorter.h" ] || die "BUILD does not point to LibUCW build directory"
|
|
|
|
# Find out sort buffer size
|
|
parse-config 'Sorter{##SortBuffer}'
|
|
SORTBUF=$CF_Sorter_SortBuffer
|
|
[ "$SORTBUF" -gt 0 ] || die "Unable to determine SortBuffer"
|
|
log "Detected sort buffer size $SORTBUF"
|
|
|
|
# Size of the test -- should be slightly less than a half of SortBuffer
|
|
SIZE=$(($SORTBUF/2 - 8192))
|
|
log "Decided to benchmark sorting of $SIZE byte data"
|
|
|
|
# Which bit widths we try
|
|
WIDTHS="0 6 7 8 9 10 11 12 13 14"
|
|
|
|
# Which RadixThresholds we try
|
|
THRS="2000 4000 10000 20000 50000"
|
|
|
|
# Which sort-test tests we try
|
|
TESTS="2,5,8,15"
|
|
|
|
# Check various bit widths of the radix sorter
|
|
rm -f tmp/radix-*
|
|
for W in $WIDTHS ; do
|
|
rm -f $BUILD/obj/ucw/sorter/sort-test{,.o}
|
|
if [ $W = 0 ] ; then
|
|
log "Compiling with no radix splits"
|
|
( cd $BUILD && make obj/ucw/sorter/sort-test )
|
|
OPT="-d32"
|
|
else
|
|
log "Compiling with $W-bit radix splits"
|
|
( cd $BUILD && make CEXTRA="-DFORCE_RADIX_BITS=$W" obj/ucw/sorter/sort-test )
|
|
OPT=
|
|
fi
|
|
for THR in $THRS ; do
|
|
log "Testing with RadixThreshold=$THR"
|
|
$BUILD/obj/ucw/sorter/sort-test -SThreads.DefaultStackSize=2M -SSorter.RadixThreshold=$THR -s$SIZE -t$TESTS $OPT -v 2>&1 | tee -a tmp/radix-$W
|
|
done
|
|
done
|
|
|
|
echo "thresh" >tmp/radix-thrs
|
|
echo "test#" >tmp/radix-tests
|
|
for THR in $THRS ; do
|
|
for TEST in `echo $TESTS | tr ',' ' '` ; do
|
|
echo $THR >>tmp/radix-thrs
|
|
echo $TEST >>tmp/radix-tests
|
|
done
|
|
done
|
|
|
|
FILES="tmp/radix-thrs tmp/radix-tests"
|
|
for W in $WIDTHS ; do
|
|
a=tmp/radix-$W
|
|
echo >$a.out "$W bits"
|
|
sed 's/.* \([0-9.]\+\)s internal sorting.*/\1/;t;d' <$a >>$a.out
|
|
FILES="$FILES $a.out"
|
|
done
|
|
|
|
log "These are the results:"
|
|
paste $FILES
|
|
|