Revision 1b57c8e01a682145f576e101c868ba84ea38ec1b authored by ah744 on 06 August 2016, 01:41:28 UTC, committed by ah744 on 06 August 2016, 01:41:28 UTC
1 parent 2eae3de
gen-scheds.sh
#!/bin/bash
DIR=$(dirname $0)
ROOT=$DIR/..
OPT=$ROOT/build/Release+Asserts/bin/opt
SCAF=$ROOT/build/Release+Asserts/lib/Scaffold.so
# Capacity of each SIMD region
D=(1024)
# Number of SIMD regions
K=(2)
# Module flattening threshold: must be picked from the set in scripts/flattening_thresh.py
THRESHOLDS=(2M)
# Full schedule? otherwise only generates metrics (faster)
FULL_SCHED=true
# Create directory to put all byproduct and output files in
for f in $*; do
b=$(basename $f .scaffold)
echo "[gen-scheds.sh] $b: Creating output directory ..."
mkdir -p "$b"
#mv ./*${b}* ${b} 2>/dev/null
done
# Generate .ll file if not done already
for f in $*; do
b=$(basename $f .scaffold)
echo "[gen-scheds.sh] $b: Compiling ..."
if [ ! -e ${b}/${b}.ll ]; then
# Generate compiled files
$ROOT/scaffold.sh -r $f
mv ${b}11.ll ${b}11.ll.keep_me
# clean intermediary compilation files (comment out for speed)
$ROOT/scaffold.sh -c $f
# Keep the final output for the compilation
mv ${b}11.ll.keep_me ${b}/${b}.ll
fi
done
# Module flattening pass with different thresholds
for f in $*; do
b=$(basename $f .scaffold)
echo "[gen-scheds.sh] $b: Flattening ..."
echo "[gen-scheds.sh] Computing module gate counts ..."
$OPT -S -load $SCAF -ResourceCount2 ${b}/${b}.ll > /dev/null 2> ${b}.out
python $DIR/flattening_thresh.py ${b}
for th in ${THRESHOLDS[@]}; do
if [ ! -e ${b}/${b}.flat${th}.ll ]; then
echo "[gen-scheds.sh] Flattening modules smaller than Threshold = $th ..."
mv ${b}.flat${th}.txt flat_info.txt
$OPT -S -load $SCAF -FlattenModule -dce -internalize -globaldce ${b}/${b}.ll -o ${b}/${b}.flat${th}.ll
fi
done
rm -f *flat*.txt ${b}.out
done
# Perform resource estimation
for f in $*; do
b=$(basename $f .scaffold)
echo "[gen-scheds.sh] $b: Resource count ..."
for th in ${THRESHOLDS[@]}; do
if [ -n ${b}/${b}.flat${th}.resources ]; then
echo "[gen-scheds.sh] Resource count for Threshold = $th flattening ..."
$OPT -S -load $SCAF -ResourceCount ${b}/${b}.flat${th}.ll > /dev/null 2> ${b}/${b}.flat${th}.resources
fi
done
done
# For different K and D values specified above, generate MultiSIMD schedules
for f in $*; do
b=$(basename $f .scaffold)
for d in ${D[@]}; do
for k in ${K[@]}; do
echo "[gen-scheds.sh] $b: Generating SIMD K=$k D=$d leaves ..."
for th in ${THRESHOLDS[@]}; do
if [ ! -e ${b}/${b}.flat${th}.simd.${k}.${d}.leaves ]; then
echo "[gen-scheds.sh] GenSIMD for Threshold = $th flattening ..."
$OPT -load $SCAF -GenSIMDSchedule -simd-kconstraint $k -simd-dconstraint $d ${b}/${b}.flat${th}.ll > /dev/null 2> ${b}/${b}.flat${th}.simd.${k}.${d}
${DIR}/leaves.pl ${b}/${b}.flat${th}.simd.${k}.${d} > ${b}/${b}.flat${th}.simd.${k}.${d}.leaves
fi
done
done
done
done
# Perform different kinds of LPFS, RCP, SS scheduling, as specified in the regress.sh file
for f in $*; do
b=$(basename $f .scaffold)
echo "[gen-scheds.sh] $b: Generating LPFS, RCP, SS leaves ..."
cd ${b}
if [ "$FULL_SCHED" = true ]; then
../${DIR}/full_sched_regress.sh ${b}*.leaves
else
../${DIR}/regress.sh ${b}*.leaves
fi
cd ..
done
# Take into account the penalty of ballistic communication
for f in $*; do
b=$(basename $f .scaffold)
cd ${b}
echo "[gen-scheds.sh] $b: Adding communication latencies ..."
../${DIR}/comm_aware.pl ${b}*.ss ${b}*.lpfs ${b}*.rcp
cd ..
done
# Obtain coarse-grain schedules by co-scheduling modules
for f in $*; do
b=$(basename $f .scaffold)
cd ${b}
for c in comm_aware_schedule.txt.${b}.*; do
k=$(perl -e '$ARGV[0] =~ /_K(\d+)/; print $1' $c)
d=$(perl -e '$ARGV[0] =~ /_D(\d+)/; print $1' $c)
x=$(perl -e '$ARGV[0] =~ /.*_(.+)/; print $1' $c)
th=$(perl -e '$ARGV[0] =~ /.flat(\d+[a-zA-Z])/; print $1' $c)
echo "[gen-scheds.sh] $b: Coarse-grain schedule ..."
mv $c comm_aware_schedule.txt
if [ ! -e ${b}.flat${th}.simd.${k}.${d}.${x}.time ]; then
../$OPT -load ../$SCAF -GenCGSIMDSchedule -simd-kconstraint-cg $k -simd-dconstraint-cg $d ${b}.flat${th}.ll > /dev/null 2> ${b}.flat${th}.simd.${k}.${d}.${x}.cg
fi
# Now do 0-communication cost
#if [ ! -e ${b}.flat${th}.simd.${k}.${d}.w0.${x}.time ]; then
# ../$OPT -load ../$SCAF -GenCGSIMDSchedule -move-weight-cg 0 -simd-kconstraint-cg $k -simd-dconstraint-cg $d ${b}.flat${th}.ll > /dev/null 2> ${b}.flat${th}.simd.${k}.${d}.w0.${x}.time
#fi
done
rm -f comm_aware_schedule.txt
cd ..
done

Computing file changes ...